我无法理解嵌套导入在python项目中的工作方式。例如:
test.py
package/
__init__.py
package.py
subpackage/
__init__.py
test.py
:
import package
package/__init__.py
:
from .package import functionA
package/package.py
:
import subpackage
def functionA():
pass
在Python 3.5中运行test.py
时出现以下错误,但Python 2.7中没有错误:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1, in <module>
import subpackage
ImportError: No module named 'subpackage'
但是,如果我使用Python 3.5运行package.py
。我完全没有错误。
这对我来说似乎很奇怪,因为当package.py
自行运行时import subpackage
行正常工作,但是它正在运行&#39; (通过嵌套导入,不知道这是否是正确的术语),同一行找不到subpackage
。
为什么在这种情况下Python 2.7和3.5之间存在差异?如何以适用于2.7.x和3.x的方式解决这个问题?
我认为这可能是由于嵌套导入中的import subpackage
计为嵌套导入中的隐式相对导入,而不是直接运行package.py
时,但是如果我import .subpackage
相反,我在2.7和3.5上都得到了这个错误:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1
import .subpackage
^
SyntaxError: invalid syntax
答案 0 :(得分:2)
您应该使用:
<div ng-repeat="project in projects" ng-show="project.gid === parent_id">
{{ project }}
</div>
from . import subpackage
中的。