我有两个包a
和b
。它们位于同一目录中,b
依赖于a
(但不是相反)。当我在from . import a
中运行b\some_package.py
时,我得到ImportError: cannot import name a
。当我运行import a
(来自相应的目录)时,没有错误。两个包都有__init__.py
个。 This answer解释了为什么相当好,但没有提到如何解决这个问题。我该如何解决这个问题?
文件结构:
parent_directory
a
__init__.py
module_in_a.py
b
__init__.py
module_in_b.py (this imports a)
答案 0 :(得分:0)
包相对导入不能引用包外的模块。这在一般意义上是不可能的,因为它假定模块相对路径始终与文件系统目录相同。但是模块可以安装在很多地方,也可以存放在鸡蛋等档案中。
如果您安装软件包a
和b
,则不会遇到问题。 Python的virtualenv可以帮助您完成不会影响系统python模块的本地安装。但您也可以编辑PYTHONPATH
环境变量以指向已安装a
和b
的位置,也可以在程序中更改sys.path
。例如,
B / module_in_b.py
import sys
import os
_my_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
if _my_path not in sys.path:
sys.path.append(_my_path)
del _my_path
import a