我有两个文件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'
我做错了什么?
答案 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