[英]Py.test No module named *
我有這樣的文件夾結構
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我的test_app.py file
中,有一行用於導入我的應用程序模塊。 當我在根文件夾上運行 py.test 時,我收到關於沒有名為 app 的模塊的錯誤。 我應該如何配置這個?
使用 Python 3 並在類似的項目布局上遇到相同的錯誤,我通過向我的tests
模塊添加一個__init__
文件來解決它。
$ touch tests/__init__.py
我不擅長打包和導入,但我認為這有助於pytest
確定目標App
模塊所在的位置。
我已經在/App/App
目錄中有一個__init__.py
文件,並希望從項目根目錄運行測試而沒有任何路徑修改魔法:
python -m pytest tests
輸出立即如下所示:
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
所以你正在從/App
運行py.test
。 您確定/App/App
在您的$PYTHONPATH
嗎?
如果不是,嘗試import app
代碼將失敗並顯示此類消息。
EDIT0:為了完整性,包括我下面評論中的信息。
導入 app 的嘗試只有在/App/App
執行時才會成功,這里不是這種情況。 您可能希望通過將__init__.py
放入其中來使/App/App
成為一個包,並將您的導入更改為from App import app
限定為from App import app
。
EDIT1:根據要求,從我下面的第二條評論中添加進一步的解釋。
通過將__init__.py
放在/App/App
,該目錄成為一個包。 這意味着您可以從中導入,只要它 - 目錄 - 在$PYTHONPATH
可見。 也就是說,如果/App
在$PYTHONPATH
中,您可以從App import app
/App
。 您當前的工作目錄會自動添加到$PYTHONPATH
,因此當您從/App
運行腳本時,導入將起作用。
我遇到了類似的問題,不得不從根目錄中刪除__init__.py
並將__init__.py
添加到tests
文件夾中。
在為我的應用程序運行測試用例時,我也遇到了同樣的錯誤,如下所示
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
我刪除了myproject 的init.py文件來運行我的測試用例。
您也可以將一個空的conftest.py
文件添加到您的根應用程序文件夾中。
(如果你看一下問題文件夾結構,那將與“測試”文件夾處於同一級別,而不是在其中) 。
Pytest 在所有項目文件夾中查找conftest.py
文件。
conftest.py
為 pytest 在其中找到它的文件樹提供配置。因為 pytest 以某種方式掃描從 conftest.py 文件夾開始的所有子目錄,它應該在測試文件夾之外找到包/模塊(只要 conftest.py 文件在您的應用程序中)根文件夾)。
最后,您可能想在空的 conftest.py 中編寫一些代碼,專門用於在不同的測試文件之間共享 fixture,以避免重復代碼。 畢竟,在編寫測試時也應該遵循 DRY 原則(不要重復自己)。
將__init.py__
添加到測試文件夾也應該有助於 pytest 在整個應用程序中查找模塊。 但是,請注意 Python 3.3+ 具有隱式命名空間包,允許它創建沒有__init__.py
文件的包。 也就是說,為此特定目的創建__init__.py
文件似乎更像是 pytest 的解決方法,而不是 python 要求。 更多相關信息: Is __init__.py not required for packages in Python 3.3+
使用python -m pytest
命令運行pytest
有助於解決這個問題。
由於您當前的包尚未在您的$PYTHONPATH
或sys.path
- pytest 收到此錯誤。
通過使用python -m pytest
您會自動將工作目錄添加到sys.path
以運行pytest
。 他們的文檔還提到:
這幾乎相當於調用命令行腳本
pytest
我得到了類似的問題。 在嘗試了包括在虛擬環境上安裝 pytest 和從包中添加/刪除__init__.py
文件在內的多種方法之后,沒有一個對我有用。
對我有用的解決方案是(Windows 解決方案):將項目文件夾(不是包文件夾)添加到 python 路徑(設置 PYTHONPATH=%PYTHONPATH%;%CD%)
從項目文件夾和繁榮運行我的腳本,它起作用了。
我有這樣的文件夾結構
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我的test_app.py file
,有一行要導入我的應用程序模塊。 在根文件夾上運行py.test時,出現此錯誤,提示沒有名為app的模塊。 我應該如何配置呢?
這對我有用:轉到父應用程序,然后pip install -e .
(安裝本地和可編輯的應用程序)。
對我有用的是:我必須在我的測試文件中進行絕對導入,並在根文件夾中調用python -m test
。
我遇到了同樣的問題。
my-app
--conf
--my-app
--tests
我設置了__init__.py
文件。 我添加了一個conftest.py
(用於共享pytest.fixtures
)。 我將其添加到我的詩歌文件( pyproject.toml
:
[tool.pytest.ini_options]
pythonpath = [
"."
原來這是我使用連字符而不是下划線。 不……
# pytest can't find Module
--my-app
# works
--my_app
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.