导入我的包时出现 ModuleNotFoundError,但单独 运行 时不会
ModuleNotFoundError when importing my package, but not when running it alone
我正在尝试创建一个 python 包,但我在导入时遇到了问题。我的代码在 运行 时按预期工作,但是当我使用诗歌安装包并将其导入另一个脚本时,我有一个 ModuleNotFoundError。
我的文件结构如下:
git_repo
| myapp
| |--__init__.py
| |--mainscript.py
| |--library
| | |--__init__.py
| | |--module.py
我的文件 mainscript.py
导入 module.py
因为有一些实用功能:
from library import module
当我执行主脚本时,没问题。但是,当使用 poetry install
安装 myapp
并尝试将其导入 python shell 时:
> python
>>> import myapp.mainscript
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\path\to\mainscript.py", line 5, in <module>
from library import module
ModuleNotFoundError: No module named 'library'
是否有我不了解导入的机制?我必须在 __init__.py
文件中写一些东西吗?
在此先感谢您的帮助
there are some utility functions:
from library import module
你想要:
from .library import module
https://docs.python.org/3/reference/import.html#package-relative-imports
https://docs.python.org/3/reference/simple_stmts.html#import
https://realpython.com/python-import/#absolute-and-relative-imports
好的,所以我找到了解决我自己问题的方法。
正如J_H建议的那样,我尝试了相对导入。这在安装我的包并使用它时有效。但是我在运行我的主脚本时遇到了ImportError: attempted relative import with no known parent package
。
解决方案是使用绝对导入。现在这在安装包和 运行 主脚本时都有效。
# mainscript.py
from myapp.library import module
我还在 __init__.py
文件中添加了一些导入,以便在安装时轻松使用我的包:
# myapp/__init__.py
from . import library
from .mainscript import mainClass
这让我可以 a = myapp.mainClass()
而不是 a = myapp.mainscript.mainClass()
我正在尝试创建一个 python 包,但我在导入时遇到了问题。我的代码在 运行 时按预期工作,但是当我使用诗歌安装包并将其导入另一个脚本时,我有一个 ModuleNotFoundError。
我的文件结构如下:
git_repo
| myapp
| |--__init__.py
| |--mainscript.py
| |--library
| | |--__init__.py
| | |--module.py
我的文件 mainscript.py
导入 module.py
因为有一些实用功能:
from library import module
当我执行主脚本时,没问题。但是,当使用 poetry install
安装 myapp
并尝试将其导入 python shell 时:
> python
>>> import myapp.mainscript
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\path\to\mainscript.py", line 5, in <module>
from library import module
ModuleNotFoundError: No module named 'library'
是否有我不了解导入的机制?我必须在 __init__.py
文件中写一些东西吗?
在此先感谢您的帮助
there are some utility functions:
from library import module
你想要:
from .library import module
https://docs.python.org/3/reference/import.html#package-relative-imports
https://docs.python.org/3/reference/simple_stmts.html#import
https://realpython.com/python-import/#absolute-and-relative-imports
好的,所以我找到了解决我自己问题的方法。
正如J_H建议的那样,我尝试了相对导入。这在安装我的包并使用它时有效。但是我在运行我的主脚本时遇到了ImportError: attempted relative import with no known parent package
。
解决方案是使用绝对导入。现在这在安装包和 运行 主脚本时都有效。
# mainscript.py
from myapp.library import module
我还在 __init__.py
文件中添加了一些导入,以便在安装时轻松使用我的包:
# myapp/__init__.py
from . import library
from .mainscript import mainClass
这让我可以 a = myapp.mainClass()
而不是 a = myapp.mainscript.mainClass()