簡體   English   中英

Coverage.py Python 模塊 - 運行腳本時導入錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM