我有一个小的python模块
+-- address_book
| +-- models.py
| +-- __init__.py
+-- test
| +-- test_models.py
当我运行
python address_book/test/test_models.py
时出现此错误Traceback (most recent call last):
File "address_book/test/test_models.py", line 5, in <module>
from address_book import models
ImportError: No module named 'address_book'
test_models.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
from address_book import models
...
...
...
if __name__ == '__main__':
unittest.main()
最佳答案
问题源于python不知道在哪里寻找address_book
的事实。您可以通过在启动python之前设置PYTHONPATH
环境变量来解决此问题。
给定以下目录结构:
base_dir
+-- address_book
| +-- __init__.py
| +-- models.py
+-- test
| +-- test_models.py
然后这将起作用:
$ env PYTHONPATH=/path/to/base_dir python address_book/test/test_models.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
PYTHONPATH
也可以是相对路径,只要相对路径指向当前工作目录中的源目录即可为了避免每次输入
env PYTHONPATH=/path/to/base_dir
时都可以使用shell适当的语法对其进行设置。下面,我使用bash语法设置PYTHONPATH环境变量。$ cd /path/to/base_dir
$ export PYTHONPATH=. # the current directory as a relative link
$ python address_book/test/test_models.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
附带说明一下,我将更改您的目录结构,因为将测试与源目录放在同一目录树中不是一个好主意。通常,您可能会执行以下操作:
base_dir
+-- address_book
| +-- __init__.py
| +-- models.py
+-- test # no __init__, not a module
| +-- test_models.py
这使您可以更轻松地打包项目,而无需包括测试。
关于python - 我的模块具有__init__.py,但Python仍无法导入它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39954495/