所以我在__init__.py
文件的所有地方都看到了不少答案,说实话,这对我来说非常混乱,我并不是真的得到它,所以我希望得到一些帮助/基本解释。
我的包装设置如下:
top_package/
├── __init__.py
└── mid_package/
├── __init__.py
├── first_import.py
└── bottom_package/
├── __init__.py
└── second_import.py
所以我在这里有一些问题......
如何在first_import.py
中导入second_import.py
?
接下来,如何在second_import.py
中导入first_import.py
?
最后,如果我在整个层次结构之外有一个脚本,请这样说:
docs/
├── scripts
| └── test_script.py
└── top_package/
如何在first_import.py
中导入second_import.py
和test_script.py
?
我的Python版本是3.4.5(64位Anaconda),而且我在Windows上运行,如果这有所不同。
因此,在这些问题出来之后,我将提供一些关于我迄今为止所尝试的内容的背景信息:
(1)我使用"等级"初始化每个__init.py
,例如" top" __init__.py
:
import sys
sys.path.append("C:\Path\To\top_package")
(2)我添加了一行__all__
以及该级别所有内容的数组,例如:
__all__ = ['mid_package']
(3)然后我添加了相关的导入,例如:
from .mid_package import first_import
或者:
from .. import first_import
(4)然后我会尝试在second_import.py
中的这些文件中正常加载这些文件:
import first_import
(5)接下来,在test_script.py
中,我会尝试加载为:
import sys
sys.path.append('../top_package/')
import first_import
哪会导致ImportError: No module named 'first_import'
。
我正在考虑任何和所有的想法,我现在已经在这个问题上工作了几个小时,似乎无法破解它。非常感谢!
答案 0 :(得分:0)
嗯,这是一个关于python项目结构的老问题。但我认为关键问题是您当前的工作目录不是top_package
。因此,当您的口译员想要搜索top_package
时,它就超出了范围。
这不是一个好习惯,您应该始终使用位于根目录中的脚本启动项目。一个构造良好的python项目应该像下面的例子:
project
----src
--------app.py
--------modules
------------__init__.py
------------module.py
----test
--------test_cases.py
----doc
--------document.md
----.gitignore
----license.txt
----readme.md
您应该始终按python src/app.py
启动项目,然后才能正确使用absolute import
。
请注意,这只是一个非常基本的例子。