我正在开发一个Python软件包,其基本结构如下所示,其中大括号中包含了每个Python文件的示例内容。
MAIN_PACKAGE/
setup.py
main_package/
__init__.py
{
import package1
import package2
__all__=['main_package']
}
package1/
__init__.py
{
import module1
import module2
__all__=['package1']
}
module1/
__init__.py
{
from script1 import Class1A, Class1B
__all__ = ['script1']
}
script1.py
{contains 2 classes: Class1A and Class1B}
module2/
__init__.py
{
from script2 import Class2A, Class2B
__all__ = ['script2']
}
script2.py
{contains 2 classes: Class2A, Class2B}
module3/
__init__.py
{
from script3 import Class3A, Class3B
__all__ = ['script3']
}
script3.py
{contains 2 classes: Class3A, Class3B}
package2/
executable_script.py
到目前为止,它没有给我带来麻烦。然而,我最近添加了一个新模块(module3),但无法正确导入。
我已经找到了一些相关的线索,但都不是这个特定问题。
我可以通过setup.py成功安装它,然后从命令行(任何目录)中正确导入以下内容:
python
>>> from main_package.package1.module3.script3 import Class3A, Class3B
但是,当我将同样的代码复制到脚本2中并重新运行setup.py文件(没有错误),当我运行executable_script
时,会出现以下错误:
ImportError: cannot import name Class3A
然后,我在尝试通过命令行导入到Python时也遇到了相同的错误。但是,只有当我尝试将Class3A从script3导入到script2时才会出现此问题,而不是导入类似的类别从script1到script2。我唯一能看到的区别是script3比script1更新。是否存在某些未更新的内容,以便我可以将此新模块/类导入旧脚本中?或者结构有问题而绑定要追上我呢?
另一个细节是,仅当将该行添加到同一级别的另一个模块时,才会发生此错误,但错误起源于package2中的executable_script.py文件。例如,错误消息的第一行为:
/usr/bin/executable_script, line 9, in load_entry_point('MAIN_PACKAGE==0.1.0','console_scripts','executable_script')()
可执行脚本的第9行是文档字符串的一部分。我正在使用Python 2.7。
module3
的__init__
中导入了它们,所以from main_package.package1.module3 import Class3A, Class3B
应该可以正常工作,您不需要在末尾加上.script3
。 - chown