我正试图创建一个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:pathtomainscript.py", line 5, in <module>
from library import module
ModuleNotFoundError: No module named 'library'
有没有一个我不了解进口产品的技工?我必须在__init__.py
文件中写些什么吗?
提前感谢的帮助
有一些实用程序函数:
from library import module
您想要:
from .library import module
https://docs.python.org/3/reference/import.html#package-相对进口
https://docs.python.org/3/reference/simple_stmts.html#import
https://realpython.com/python-import/#absolute-和相对进口
好的,所以我找到了自己问题的解决方案。
正如J_H所建议的,我尝试了相对导入。在安装和使用程序包时,这是有效的。但在运行主脚本时,我遇到了ImportError: attempted relative import with no known parent package
。
解决办法是使用绝对进口。现在,这在安装包和运行main脚本时都有效。
# 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()