第一个问题,如果我犯了一个菜鸟错误或不清楚的话,请与我一起出去!
我无法让Python的“覆盖”模块正常工作。
我无权修改或添加到Python目录,因此无法安装easy_install来设置覆盖范围。
通过将coverage目录添加到我的python路径来解决这个问题。
覆盖率工作正常,输入covereage --version
到shell输出版本。 coverage help
显示所有可用命令。一切似乎都很好。
我可以在小的简单脚本上运行覆盖率。
但是,当运行包含5个模块(已经过测试工作的脚本)的大量导入的大型脚本时,在运行带有coverage run [normal commands]
的命令时,脚本会执行并失败,因为无法找到某些模块。
这是一个细分 -
没有覆盖的命令行(工作正常):
我通过运行:./script_name.py arg1 arg2 arg3
当我尝试输入:python script_name.py arg1 arg2 arg3
来运行脚本时,脚本失败,无法导入模块:
Error message:
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
Now we are getting somewhere. Coverage is clearly invoked and working, put I get that import error:
Error message:
ImportError: No module named cx_Oracle
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
好消息是,明确地使用“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可执行文件以及模块的搜索路径。以两种方式运行脚本将显示不同的结果,您应该能够弄清楚发生了什么。
答案 1 :(得分:0)
我认为我也遇到了类似的问题,并设法通过如下方式解决此问题:
python -m coverage run [normal commands]
特别是在我的情况下
python -m coverage run -m unittest discover
这肯定是使用其他python安装的覆盖范围的情况,因为据报告丢失的模块仅安装在我的虚拟环境中,而不安装在我的全局环境中。
答案 2 :(得分:0)
我将补充我的经验,因为有人可能会犯同样的错误。
我正在python虚拟环境(venv)内运行coverage,但未安装coverage。实际上,执行覆盖范围是指我在全球范围内安装的覆盖范围。
通过pip3 install coverage
在本地安装python3 -m coverage run myfile.py
可以解决该问题。
答案 3 :(得分:0)
我刚刚遇到了一个非常相似的问题,在本地使用以下两种方法对我来说都是有效的:
coverage run
python -m coverage run
因此,每当我运行make unit-test
时,在其中一个都可以正常工作,但是当我将代码部署到AWS上的代码构建时,这两个make目标都无法正常工作。
我最终将其归结为以下事实:随着时间的流逝,我已经在本地和本地环境中安装了Coverage,但是在开始使用pyenv时,我也将其安装到了pyenv环境中,所以在本地安装了三个地方。
在构建代理上运行时,实际上我实际上只是将其安装到新的pyenv环境中,因此我必须使用以下语法:
python -m pipenv run coverage run --source=src/app -m pytest -s --junitxml=result.xml src/test/unit/*.py
我想我这个故事的寓意是保持您的工作环境整洁,从现在开始我将尽力做到这一点。
这可能会帮助处于类似情况的人,这就是我要发布的原因。