繁体   English   中英

从相邻模块导入软件包在Py2中有效,但在Py3中无效

[英]Import package from adjacent module works in Py2 but not in Py3

我仍然习惯于构造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 _packagescriptA中可用,但在Py3.5上失败,并显示错误ImportError: No module named 'scriptB'

如何以与Py2和3兼容的方式导入package 为什么有什么不同?

我尝试import .package as _package但这似乎并没有改变任何内容(仍在确定何时使用... ...

没有名为“ scriptB”的模块

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

因此,问题在于__init__.py中的导入应该是相对导入,即:

from .scriptB import functionB
from .scriptC import functionC

我想这是导入模块和python包之间的区别之一。 似乎在Py3.5中,需要显式完成相对导入,因此引发了错误。 这是我的解释。 不幸的是,我在问题中提出的结构与我所遇到的问题不够接近,因此无法解决问题……但是,仍欢迎对此进行更详细的(可能是准确的)答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM