在python3中未检测到模块,但在python2中有效

时间:2019-06-10 10:11:33

标签: python python-3.x python-import importerror

我安装了具有以下目录结构的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

2 个答案:

答案 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

避免产生任何歧义。