Coverage.py Python模块 - 运行脚本时导入错误
我在使用Python的“coverage”模块时遇到了一些麻烦。
因为我没有权限去修改或添加Python目录的内容,所以无法安装easy_install来设置coverage。
我通过把coverage的目录添加到我的Python路径中来解决这个问题。现在coverage可以正常工作,输入coverage --version
到命令行可以显示版本号,输入coverage help
可以看到所有可用的命令。一切看起来都不错。
我可以在一些简单的小脚本上顺利运行coverage。
但是,当我在一个包含5个模块的大脚本上运行时(这个脚本之前测试过可以正常工作),使用coverage run [正常命令]
来运行时,脚本执行失败,因为找不到某些模块。
下面是详细情况:
没有使用coverage的命令行(正常工作):
我通过运行:./script_name.py arg1 arg2 arg3
来调用这个脚本。
当我尝试通过输入:python script_name.py arg1 arg2 arg3
来运行脚本时,脚本失败,无法导入模块:
ImportError: No module named cx_Oracle
使用coverage的命令行:
$ 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
现在我们有进展了。coverage显然被调用并且在工作,但我遇到了导入错误:
ImportError: No module named cx_Oracle
4 个回答
我想分享一下我的经验,因为可能有人会犯同样的错误。
我在一个Python虚拟环境(venv)里运行代码覆盖率检查,但发现没有安装覆盖率工具。结果我执行覆盖率检查时,其实是在调用全局安装的覆盖率工具。
后来我通过在虚拟环境里使用 pip3 install coverage
安装了覆盖率工具,这样就解决了问题。现在我可以用 python3 -m coverage run myfile.py
来运行我的文件了。
我觉得我遇到过类似的问题,最后通过这样运行覆盖率工具解决了:
python -m coverage run [正常命令]
具体来说,在我的情况下是:
python -m coverage run -m unittest discover
看起来确实是覆盖率工具使用了不同的Python安装版本,因为我缺少的那个模块只在我的虚拟环境中安装了,而在我的全局环境中没有。
好消息是,直接用“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程序和模块的搜索路径。用这两种方式运行你的脚本会得到不同的结果,这样你就能搞清楚发生了什么。