用于导入模块的Python查找文件夹

时间:2012-09-04 19:47:35

标签: python module

两个py文件:

./ SRC / foo.py

def bar ():
    print 'bar!'

./测试/ testfoo.py

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;?

中的模块

编辑#1

还添加了两个空的 init .py文件。

./src/__init__.py
./tests/__init__.py

仍然遇到同样的错误。

编辑#2(解决方案)

我通过添加新的初始化py文件来解决问题

prep.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

它有效

3 个答案:

答案 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环境中,也可以每次手动完成。