如何在同一个父目录中导入另一个模块?

时间:2015-01-13 12:10:32

标签: python

我有两个文件foo/a.py

def haha():
    print("haha")

还有bar/b.py

import foo.a as a

我无法运行b.py,但是:

> python bar/b.py 
Traceback (most recent call last):
  File "bar/b.py", line 1, in <module>
    import foo.a
 ImportError: No module named 'foo'

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Python只能在你的PYTHONPATH上找到模块。有关如何设置的信息,请参阅this question

模块可以位于顶层,也可以位于中。如果运行python bar / b.py,则b.py所在的目录将隐式添加到Python路径中。 foo /和bar /所在的目录对于Python来说是未知的,更不用说包含a.py的目录了。

您可以将'./foo'添加到PYTHONPATH。然后'导入'将起作用。

如果你想要'import foo.a'工作,那么'foo'必须是一个包,并且必须能够找到它。为此,请添加“。” (包含foo /'到Pythonpath的目录,在a.py 所在的目录中放置一个名为__init__.py的空文件(注意是双下划线)。这使得foo成为一个包,和该包中的foo.aa模块。

答案 1 :(得分:0)

是在__init__.py位置添加../foo/

并使用以下内容:

我的目录结构如下:/home/test/foo/a.py/home/test/bar/b.py

import sys
sys.path.append('/home/test')
from foo import a
try:sys.path.remove('/home/test')
except:pass