为什么ImportError只与from?

时间:2016-09-23 22:04:18

标签: python python-2.7 import python-import

我有两个包ab。它们位于同一目录中,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)

1 个答案:

答案 0 :(得分:0)

包相对导入不能引用包外的模块。这在一般意义上是不可能的,因为它假定模块相对路径始终与文件系统目录相同。但是模块可以安装在很多地方,也可以存放在鸡蛋等档案中。

如果您安装软件包ab,则不会遇到问题。 Python的virtualenv可以帮助您完成不会影响系统python模块的本地安装。但您也可以编辑PYTHONPATH环境变量以指向已安装ab的位置,也可以在程序中更改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