我仍然习惯于构建python项目和相关导入,我认为我理解相对导入,直到我在Py3上测试时遇到问题。
我有一个类似结构的项目:
scriptA.py
package/__init__.py
scriptB.py
scriptC.py
和__init.py__
包含以下内容:
from scriptB import functionB
from scriptC import functionC
scriptA
import package as _package
在Py2.7中有效,但在Py3.5上失败,错误为ImportError: No module named 'scriptB'
。
如何以与Py2和3兼容的方式导入package
?为什么会有所不同?
我尝试过import .package as _package
,但这似乎没有改变任何事情(仍在确定何时使用.
和..
......
答案 0 :(得分:0)
没有名为'scriptB'的模块
看起来像路径错误。检查你的路径声明。 可以通过在开始菜单搜索栏中键入“system”来访问Windows中的路径语句。从那里你可以访问“环境变量”,其中一个是“路径”声明。在那里,您可以看到Python脚本允许访问的不同目录。确保列出了Python 3.x目录和Python 3.x / scripts目录 路径语句中列出的文件有点像程序中的全局变量。如果Python 2和Python 3在其目录中都具有相同文件名,则可以访问不兼容的文件。我已经读过有一个python启动器可以解决这个问题,这样你就可以在同一台计算机上运行多个版本的python。 现在我会测试看看这是不是你的问题 - 将路径语句复制到备份文件然后 -remove对python 2.x的引用, -重启 - 运行你的程序。 如果你想运行多个版本的python,请复制原始路径语句并安装python启动器。
答案 1 :(得分:0)
所以问题是__init__.py
中的进口应该是相对进口,即:
from .scriptB import functionB
from .scriptC import functionC
我想这是导入模块和python包之间的区别之一。似乎在Py3.5中需要明确地完成相对导入,因此抛出了错误。这是我的解释。不幸的是,我在问题中所提出的结构与我所遇到的问题并不相近,所以这并没有解决这个问题......但是仍然欢迎更详细(也可能是准确的)答案。