在我目前的项目中,我有以下结构:
- start.py (this script is run and imports from parentPackage and it's children)
- parentPackage
- subPackage1
- __init__.py
- foo.py
- bar.py
- ...
- subPackage2
- __init__.py
- foo1.py
- bar2
- ...
- __init__.py
- someDataSource.py
- someOtherThing.py
- hereIsAnotherOne.py
- andSomeMore.py
在__init__.py
文件中(下划线不在SO上显示)我添加了这样的导入:
示例(parentPackage)
from .someDataSource.py import SomeDataSource
from .someOtherThing.py import SomeOtherThing
from .hereIsAnotherOne.py import HereIsAnotherOne
from .andSomeMore.py import AndSomeMore
我也为子包重复了这个过程。
然后,当我想从.hereIsAnotherOne.py
导入SomeDataSource时,我只写:
from parentPackage import SomeDataSource
这完美地工作了几个星期,但现在突然停止了工作。
我已尝试从子包中删除__init__.py
个文件,并在parentPackage的__init__.py
中进行导入,但这并不起作用。
这怎么可能?我没有触及__init__.py
文件或其他任何内容,我只在parentPackage中添加了一个新文件。
我在这里做错了吗?这总对我有用。我意识到在SO上有很多这个问题的答案,但似乎都没有解决我的问题。
note :我使用PyCharm作为我的IDE,奇怪的是PyCharm认为导入是有效的,没有任何警告,直到运行时。
谢谢大家!
PS:我正在运行python3.6
答案 0 :(得分:0)
你有一个循环导入:
在parentPackage
,您可以从hereIsAnotherOne
和导入
在hereIsAnotherOne
中,您从parentPackage
导入。您必须直接从其源模块SomeDataSource
导入someDataSource.py
或在您使用它的函数内本地导入它来解决此问题。
无论哪种方式,循环导入的发生都应该让人们重新考虑重构当前的包架构。