从相邻模块导入包在Py2中有效,但在Py3中不起作用

2024-09-27 22:38:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然习惯于构建python项目和相关导入,我以为我基本上理解了相对导入,直到在Py3上测试时遇到了一个问题。在

我有一个项目的结构是这样的:

scriptA.py
package/__init__.py
          scriptB.py
          scriptC.py

并且__init.py__包含以下内容:

^{pr2}$

InscriptAimport package as _package在Py2.7中工作,但在Py3.5上失败,错误是ImportError: No module named 'scriptB'。在

如何以既兼容Py2和py3的方式导入package?这有什么不同?在

我试着做import .package as _package,但这似乎并没有改变什么(仍然在想什么时候使用.和{}。。。在


Tags: 项目nopypackageinitas错误py3
2条回答

没有名为“scriptB”的模块

看起来像是路径错误。检查路径语句。 Windows中的path语句可以通过在开始菜单搜索栏中键入“system”来访问。从那里可以访问“环境变量”,其中之一是“path”语句。在那里您可以看到允许Python脚本访问的不同目录。确保您的Python 3.x目录和Python 3.x/scripts目录都列在那里。
path语句中列出的文件有点像程序中的全局变量。如果python2和python3的目录中的文件名相同,则可以访问不兼容的文件。我读到有一个python启动器可以解决这个问题,这样您就可以在同一台计算机上运行python的多个版本。 现在我要测试一下这是否是你的问题 -将路径语句复制到备份文件,然后 -删除对python2.x的引用, -重新启动 -运行你的程序。 如果要运行多个版本的python,请将原始的path语句复制回并安装python启动器。在

所以问题是__init__.py中的进口应该是相对进口,即:

from .scriptB import functionB
from .scriptC import functionC

我想这就是导入模块和python包的区别之一。在Py3.5中,似乎需要显式地执行相对导入,因此抛出了一个错误。这是我的解释。不幸的是,我在问题中提出的结构不够接近我的问题,所以这并不能解决它。。。但对于这个问题,一个更详细(也许是准确的)答案仍然受到欢迎。在

相关问题 更多 >

    热门问题