py.test:ImportError:没有名为mysql的模块

时间:2014-02-15 16:47:59

标签: python mysql virtualenv pytest

我在运行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

知道问题是什么?

2 个答案:

答案 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