7

我无法让 Python 的“覆盖”模块正常工作。

我无权修改或添加到 Python 目录,因此无法安装 easy_install 来设置覆盖范围。

通过将覆盖目录添加到我的 python 路径来解决此问题。覆盖工作正常,输入coverage --version到 shell 输出版本。coverage help显示所有可用的命令。一切似乎都很好。

我可以在小的简单脚本上很好地运行覆盖。

但是,当运行具有跨 5 个模块的大量导入的大型脚本时(已测试为工作的脚本),当使用 运行命令时coverage run [normal commands],脚本执行并失败,因为找不到某些模块。

这是一个细分:

没有覆盖的命令行(工作正常):

我通过运行调用脚本:./script_name.py arg1 arg2 arg3

当我尝试通过输入:运行脚本时python script_name.py arg1 arg2 arg3,脚本失败,无法导入模块:

ImportError: No module named cx_Oracle

覆盖范围的命令行:

$ coverage run ./script_name.py arg1 arg2 arg3

"No file to run: 'main.py'"
$ coverage run {full_path_to_module_name}/script_name.py arg1 arg2 arg3

现在我们正在取得进展。覆盖显然被调用并工作,但我得到那个导入错误:

ImportError: No module named cx_Oracle
4

4 回答 4

16

我想我有一个类似的问题,并设法通过运行这样的覆盖来解决它:

python -m coverage run [normal commands]

特别是在我的情况下

python -m coverage run -m unittest discover

这似乎是使用不同的 python 安装进行覆盖的情况,因为报告丢失的模块仅安装在我的虚拟环境中,而不是在我的全局环境中。

于 2019-07-18T09:00:17.013 回答
4

好消息是,明确地使用“python”运行,并且使用coverage.py 会产生相同的结果。坏消息是,结果是一条错误消息。

似乎您有不止一个 Python 安装。一个由“./script_name.py”找到,另一个由“python ./script_name.py”找到。

要诊断问题,请将这些行添加到 script_name.py 的顶部:

import sys
print sys.executable
print "\n".join(sys.path)

这将向您显示正在调用的 Python 可执行文件以及模块的搜索路径。以两种方式运行您的脚本将显示不同的结果,您应该能够弄清楚发生了什么。

于 2011-08-15T13:01:10.757 回答
1

我将添加我的经验,因为有人可能会陷入同样的​​错误。

我在没有安装覆盖的python虚拟环境(venv)中运行覆盖。执行覆盖实际上是调用全局安装的覆盖。

在本地安装pip3 install coverage为我解决了它,现在使用python3 -m coverage run myfile.py.

于 2019-11-15T14:41:51.700 回答
0

我刚刚遇到了一个非常相似的问题,在本地使用以下任一方法对我有用:

coverage run

python -m coverage run

因此,每当我在本地运行make unit-test其中任何一个时都可以正常工作,但是当我将代码部署到 AWS 上的 codebuild 时,这些目标都不起作用。

我终于把它归结为这样一个事实,随着时间的推移,我已经在本地安装了覆盖,并安装到我的本地环境中,但是在开始使用 pyenv 时,我也将它安装到了我的 pyenv 环境中,所以在本地安装了三个地方。

在构建代理上运行时,我实际上只是将其安装到新的 pyenv 环境中,因此我必须使用以下语法:

python -m pipenv run coverage run --source=src/app -m pytest -s --junitxml=result.xml src/test/unit/*.py

我想我的故事的寓意是保持您的工作环境清洁,从现在开始我将努力做到这一点。

这可能会帮助处于类似情况的人,这就是我发布的原因。

于 2020-07-08T08:08:56.467 回答