两个py文件:
def bar ():
print 'bar!'
from foo import bar
print 'testing'
bar ()
在根文件夹' ./' ;,调用
python ./tests/testfoo.py
结果是
Traceback (most recent call last):
File "./tests/testfoo.py", line 1, in <module>
from foo import bar
ImportError: No module named foo
运行testfoo.py但解释器无法找到自然的模块foo。我可以给解释器提供任何参数来查找文件夹&#39; src&#39;?
中的模块还添加了两个空的 init .py文件。
./src/__init__.py
./tests/__init__.py
仍然遇到同样的错误。
我通过添加新的初始化py文件来解决问题
import os, sys
cur = os.path.dirname (__file__)
pathtest = os.path.join (cur, 'tests')
sys.path.append (pathtest)
然后叫:
python prep.py tests/testfoo.py
它有效
答案 0 :(得分:3)
环境变量PYTHONPATH保留Python模块的搜索路径。例如
$ echo $PYTHONPATH
/home/username/lib/python2.6/site-packages:/usr/local/stsci_python/lib/python:
修改此项以添加目录:
export PYTHONPATH="$PYTHONPATH:/your/new/path"
(顺便说一下,这是在BASH上。)
答案 1 :(得分:2)
试试这个:
import sys
sys.path.append('your/path')
import testfoo
您可能需要将./tests
设为绝对路径......
答案 2 :(得分:1)
在这些目录中加上一个__init__.py
来向python表明它们应该被视为包。
./src/__init__.py
./tests/__init__.py
这将解决您正在运行它的位置的问题,因为python将检查当前目录。但是如果你从一些随机位置运行它,它将无法解决问题:
/some/other/path/ $ /projects/tests/testfoo.py
您需要修改PYTHONPATH以包含该位置:
PYTHONPATH=$PYTHONPATH:/projects
这可以添加到您的shell环境中,也可以每次手动完成。