目前我習慣pyenv
安裝特定python
版本。然後我用它pipenv
為我的各種專案創建虛擬環境python
。
目前我的專案結構類似:
foo/
src/app.py
src/__init__.py
tests/unit/test_app.py
tests/unit/__init_.py
test_app.py
導入 as 時有任意給定數量的測試app.py
:
import src.app
我有兩個問題:
- 程式碼編輯器喜歡
emacs
,vim
或者vscode
確實抱怨import
測試中的該子句,將其標記為紅色並且“適度”煩人。 - 我從文字編輯器中調用
pipenv run pytest
來檢查測試。它失敗,因為src
不是它可以找到的模組。如果我從專案目錄中的終端呼叫相同的命令,我會收到相同的錯誤。
如果我將它作為python
模組調用pipenv run python -m pytest
,它確實可以工作,因為它將當前目錄添加到PYTHONPATH
.如果我從 a 啟動編輯器,pipenv shell
測試也可以工作。無論我如何啟動編輯器,它import src.app
都會標記為無效。
如果我啟動編輯器設置,PYTHONPATH=$PYTHONPATH:.
測試也可以工作,但語法檢查仍然會抱怨。
emacs
使用or等編輯器處理此問題的最簡潔方法是什麼vim
?我不想轉向pycharm
“自動”解決此問題的類似工具。
答案1
根據pipenv
文件;載入調用.env
目錄中的任何檔案。pipenv
這表示(例如)當您在使用層時test_app.py
開啟時,項目的 會被加載(像往常一樣),但也會自動加載,並且文件的內部依賴項將起作用。emacs
python
pipenv
.env
例如,.env
在專案的根目錄中使用此內容建立對我來說很有效:
PYTHONPATH=$PYTHONPATH:.
現在,您也可以直接執行單元測試,而emacs
不會遇到匯入問題。
這是我能夠使其工作的唯一方法,但該解決方案感覺很黑客且不優雅。