最近从python2切换到python3.8之后,我遇到了问题。
这是我的文件设置(摘要):
package/
__init__.py
main.py
modules/
__init__.py
log.py
在python2中,我曾经使用以下命令将log.py导入main.py:
import modules.log
当我在python3中执行此操作并使用以下命令从控制台调用main.py时
python /path/to/package/main.py
一切正常。
但是然后我从中创建一个python包,并将其安装在archlinux / raspberrypi上,并通过控制台通过以下命令调用脚本:
/usr/bin/package
它告诉我
$ package
Traceback (most recent call last):
File "/usr/bin/package", line 11, in <module>
load_entry_point('package==3.1.1', 'console_scripts', 'package')()
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
return ep.load()
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2443, in load
return self.resolve()
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2449, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/usr/lib/python3.8/site-packages/package/main.py", line 5, in <module>
import modules.log
ModuleNotFoundError: No module named 'modules'
知道为什么它不起作用吗?我想它一旦安装为软件包,便会出现在不同的地方。
提前致谢
编辑:将导入更改为时,我可以成功运行该程序包
from package.modules import log
但是,只有将其作为软件包安装时,它才起作用。从我的IDE(未将其作为软件包安装)运行它自然会导致错误
ModuleNotFoundError: No module named 'package'
您可以使用相对导入来进行包内引用,例如,要进行以下main.py
引用log.py
:
import .modules.log
import
Python 2和3之间的行为发生了巨大变化。请参阅《保守的Python 3移植指南:导入》。
对于本地开发,有一个不错的选择将软件包安装为符号链接
pip install -e ./ --user
在这种情况下,它将使您安装的软件包与源保持最新,同时您将能够照常使用此软件包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句