2

两个py文件:

./src/foo.py

def bar ():
    print 'bar!'

./tests/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。我可以给解释器提供任何参数以在文件夹“src”中查找模块吗?

编辑#1

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

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

仍然得到同样的错误。

编辑#2(解决方案)

我通过添加一个新的初始化 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

有效

4

3 回答 3

4

试试这个:

import sys
sys.path.append('your/path')
import testfoo

您可能需要创建./tests一个绝对路径...

于 2012-09-04T19:49:11.840 回答
4

环境变量 PYTHONPATH 保留 Python 模块的搜索路径。例如

$ echo $PYTHONPATH
/home/username/lib/python2.6/site-packages:/usr/local/stsci_python/lib/python:

修改它以添加您的目录:

export PYTHONPATH="$PYTHONPATH:/your/new/path"

(顺便说一下,这是在 BASH 上。)

于 2012-09-04T19:54:00.137 回答
1

在这些目录中放置一个__init__.py以向 python 表明它们应该被视为包。

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

这将从您运行它的位置解决问题,因为 python 将检查当前目录。但如果您从某个随机位置运行它,它不会解决问题,例如:

/some/other/path/ $ /projects/tests/testfoo.py

您需要修改 PYTHONPATH 以包含该位置:

PYTHONPATH=$PYTHONPATH:/projects

这可以添加到您的 shell 环境中,也可以每次手动完成。

于 2012-09-04T19:50:07.643 回答