因此,我在整个地方看到了很多有关__init__.py
文件的答案,而且说实话,这对我来说都非常混乱,我并没有真正了解它,所以我希望得到一些帮助/基本解释。Python包中__init__.py层次结构的正确结构
我有一个包设置如下:
top_package/
├── __init__.py
└── mid_package/
├── __init__.py
├── first_import.py
└── bottom_package/
├── __init__.py
└── second_import.py
所以我这里有几个问题...
如何导入second_import.py
first_import.py
?
接下来,如何在first_import.py
中导入second_import.py
?
最后,如果我有这样的整个层次的外部的脚本,这样说:
docs/
├── scripts
| └── test_script.py
└── top_package/
我怎么会导入first_import.py
和test_script.py
second_import.py
?
我的Python版本是3.4.5(64位Anaconda),而且我在Windows上运行,如果这有所帮助。
因此,与这些问题的出路,我将提供什么我到目前为止已经试过一点背景知识:
(1)我初始化每个__init.py
以其“水平”,比如这“顶部” __init__.py
:
import sys
sys.path.append("C:\Path\To\top_package")
(2)I加入__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'
。
我为任何和所有的想法,我一直在这个工作了几个小时,现在似乎无法破解它。非常感谢!
使用绝对导入。 '从top_package.mid_package import first_import'和'from top_package.mid_package.bottom_package import second_import' – Sraw
@Sraw在__init __。py'文件中还是在外部文件中? – user3684314
@Sraw对外部文件做这样的操作不管用或不用'sys.path.append('../ top_package /')'(如果没有对当前'__init__进行编辑。 py'文件如上所述 – user3684314