我在运行mysql的软件包上运行py.test时遇到问题。包mysql是用virtualenv中的pip安装的。
# test_mysql.py
import mysql
def foo():
pass
我可以毫无问题地运行python test_mysql.py
,但当我执行py.test test_mysql.py
时,我得到:
> import mysql
E ImportError: No module named mysql
知道问题是什么?
答案 0 :(得分:15)
您似乎正在使用系统范围的py.test
版本,它使用非virtualenv版本的python。 (其中,未安装mysql
包)。
在virtualenv中安装py.test
,然后您的问题就会解决。
SIDE NOTE
要确保使用新安装的py.test
,请清除shell使用的命令路径缓存。
例如,如果您使用bash
,请发出以下命令:
hash -r
答案 1 :(得分:0)
如果您在virtualenv中安装了pytest系统后,你可能会发现@fattru的答案不起作用,就像我一样。
(快速注意: py.test 是该命令的旧版本, pytest 是推荐的方式,但适用于其中一种的方法适用于另一种)
您可以通过调用which pytest
找到加载pytest的位置。
正如你所看到的,我的pytest指出了一个不在virtualenv中的东西:
(env) ~/projects/test/website $ which python
/home/andrew/projects/test/website/env/bin/python
(env) ~/projects/test/website $ which pytest
/home/andrew/.local/bin/pytest
以下是在virtualenv中安装pytest IS的证据:
(env) ~/projects/test/website $ pip install pytest
Requirement already satisfied: pytest in ./env/lib/python3.5/site-packages
Requirement already satisfied: py>=1.4.29 in ./env/lib/python3.5/site-packages (from pytest)
并且hash -r
没有任何区别(因为没有发生新的安装):
(env) ~/projects/test/website $ hash -r
(env) ~/projects/test/website $ which pytest
/home/andrew/.local/bin/pytest
解决方案是在virtualenv中卸载并重新安装pytest,
(env) ~/projects/test/website $ pip uninstall pytest
...
(env) ~/projects/test/website $ pip install pytest
...
(env) ~/projects/test/website $ which pytest
/home/andrew/projects/test/website/env/bin/pytest
如果由于某种原因你无法重新安装,可以通过你的virtualenv中的python调用pytest作为模块来解决这个问题:
python -m pytest