Python 子模块导入
Python submodule imports
我尝试阅读其他类似的问题,但答案对我不起作用,例如 Python submodule imports using __init__.py and module 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中简单地'import 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
使用from ...lib import talk
。你的 import lib.talk
不起作用,因为 lib 是一个包,因为 __init__.py
在 lib
字典中。
您也可以使用 path
附加方式,但您需要这样获取它:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'libs')))
这样,无论您的 Python 代码存储在哪里,您都将始终动态地附加到库的路径。
我尝试阅读其他类似的问题,但答案对我不起作用,例如 Python submodule imports using __init__.py and module 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中简单地'import 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
使用from ...lib import talk
。你的 import lib.talk
不起作用,因为 lib 是一个包,因为 __init__.py
在 lib
字典中。
您也可以使用 path
附加方式,但您需要这样获取它:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'libs')))
这样,无论您的 Python 代码存储在哪里,您都将始终动态地附加到库的路径。