我安装了具有以下目录结构的python软件包。
pkg_name/
__init__.py
work.py
helper.py
在work.py中,导入操作如下-
from helper import MyClass
它在python2.7虚拟环境中工作正常,但在python3 venv中给出以下错误
ModuleNotFoundError:没有名为“ helper”的模块
我通过添加“。”修改了work.py导入语句。如下所示,然后在python3中正常工作。
from .helper import MyClass
问题-有没有一种方法可以使其在python3中运行而无需修改包文件? (或者发布软件包时只考虑python2)
编辑:在下面添加__init__.py内容
from .work import Sample
from .helper import MyClass
答案 0 :(得分:2)
我认为你运气不好。 Python 3的documentation状态:
相对进口使用前导点。单个前导点表示 相对导入,从当前包开始。两个或更多 前导点表示相对父项的相对导入 当前程序包,第一个点之后每点一个级别。
有关此更改的更多信息,请参阅将近16年前的PEP。
我建议停止使用Python 2,并习惯于Python 3的工作方式。
答案 1 :(得分:1)
在python路径中是否有helper.py
会确定您是否能够直接导入它。
如果没有显式设置PYTHONPATH,则尝试运行脚本的目录将添加到PYTHONPATH。
附录:
如果我们尝试导入相对导入的内容:
from .module import data
被建议。
但是,最好提供这样的完整路径:
from pkg_name.helper import MyClass
避免产生任何歧义。