Python 子模块导入

标签 python importerror

我尝试阅读其他类似的问题,但答案对我不起作用,例如 Python submodule imports using __init__.pymodule has no attribute

我的文件夹结构如下:

python_scripts
├── lib
│   ├── __init__.py      # import lib.talk
│   └── talk.py          # def sayhello(x): print(x)
│   
├── src
│   ├── __init__.py      # import lib.talk
│   └── data
│       ├── __init__.py  # import lib.talk
│       └── main.py      # from lib.talk import sayhello
│                          sayhello('hi')
│
└── __init__.py          # import lib.talk

这会引发错误:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from lib.talk import sayhello
ModuleNotFoundError: No module named 'lib.talk'

奇怪的是,如果我只是在 main.py 中“导入 lib”,就没有错误。我该如何解决这个问题?

我使用的是 Windows,我非常希望避免使用 sys.path 方法,因为我们不想对路径进行硬编码(这可能会被其他团队将来使用)。

最佳答案

在您的 main.py 文件中,在顶部添加以下内容。

import sys
path = r'{path_to_python_scripts}'

if path not in sys.path:
    sys.path.append(path)

# Now import
import lib

import sys, os
path = os.path.abspath('../..')

if path not in sys.path:
    sys.path.append(path)

# Now import
import lib

或者 How to import a module given the full path?

关于Python 子模块导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752378/

相关文章:

python - 在 python 包中使用另一个文件中的类并在 __init__() 中发生冲突

python - memcached/Couchbase 中的 Flask session ;他们安全吗?

python - Scrapy 仅针对某些网站连接 MySQL

python - ImportError:使用 manage.py 时没有名为 django.core.management 的模块

python - manage.py - 导入错误 : No module named django

python - 使用命令名称/选项直接调用 distutils 或 setuptools 的 setup() 函数,而不解析命令行?

python - 使用pygame从缓冲区播放声音

python - 奇怪的 PYTHONPATH 问题

python - 为什么 Python 不能从 PIL 导入图像?

python - 如何导入python包?