![](/img/trans.png)
[英]Getting Python's coverage.py to gather coverage for the module that imports it?
[英]Coverage.py Python Module - Import Errors when Running Script
我無法讓 Python 的“覆蓋”模塊正常工作。
我無權修改或添加到 Python 目錄,因此無法安裝 easy_install 來設置覆蓋范圍。
通過將覆蓋目錄添加到我的 python 路徑來解決此問題。 Coverage 工作正常,輸入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
我想我有一個類似的問題,並設法通過運行這樣的覆蓋來解決它:
python -m coverage run [normal commands]
特別是在我的情況下
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 可執行文件,以及模塊的搜索路徑。 以兩種方式運行您的腳本將顯示不同的結果,您應該能夠弄清楚發生了什么。
我將添加我的經驗,因為有人可能會陷入同樣的錯誤。
我在 python 虛擬環境 (venv) 中運行覆蓋,但未安裝覆蓋。 執行覆蓋實際上是調用全局安裝的覆蓋。
使用pip3 install coverage
在本地安裝為我解決了這個問題,現在使用python3 -m coverage run myfile.py
。
我剛剛遇到了一個非常相似的問題,在本地使用以下任一方法對我有用:
coverage run
python -m coverage run
因此,每當我在本地運行make unit-test
時,其中任何一個都可以正常工作,但是當我將代碼部署到 AWS 上的 codebuild 時,這些 make 目標都沒有工作。
我終於把它歸結為這樣一個事實,隨着時間的推移,我已經在本地安裝了覆蓋,並安裝到我的本地環境中,但是在開始使用 pyenv 時,我也將它安裝到了我的 pyenv 環境中,所以在本地安裝了三個地方。
在構建代理上運行時,我實際上只是將其安裝到新的 pyenv 環境中,因此我必須使用以下語法:
python -m pipenv run coverage run --source=src/app -m pytest -s --junitxml=result.xml src/test/unit/*.py
我想我的故事的寓意是保持您的工作環境清潔,從現在開始我將努力做到這一點。
這可能會幫助處於類似情況的人,這就是我發布的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.