簡體   English   中英

VSCode - 在終端和 pythonpath 中運行 Python 文件

[英]VSCode - Run Python File in Terminal and pythonpath

我試圖了解 VSCode 與運行存儲在項目子包中的 python 腳本相關的行為。 如果我有一個像下面這樣的項目結構:

proj/
  util/
  main/hello.py
test/

如果 hello.py 從 proj.util 導入 - 並且我使用“在終端中運行 Python 文件”來執行腳本,它會因找不到模塊 (proj.util) 而失敗 - 因為默認情況下項目頂級目錄未添加到 pythonpath。 如果我在根目錄中創建一個 .env 文件並添加 PYTHONPATH 的定義以包含我的項目頂級目錄,則在通過上述選項運行時同樣不會使用該文件。

如果我創建一組默認的調試啟動並使用“終端中的 debug-Python 當前文件” - 這將讀取 .env 文件並按預期工作。

在終端中運行腳本時,PyCharm 會自動將頂級項目目錄添加到 sys.paths - VSCode 不應該提供這樣的選項還是我遺漏了什么?

當前版本如下,盡管我在 Windows 下看到了相同的行為。

Version: 1.30.1
Commit: dea8705087adb1b5e5ae1d9123278e178656186a
Date: 2018-12-18T22:23:23.072Z
Electron: 2.0.16
Chrome: 61.0.3163.100
Node.js: 8.9.3
V8: 6.1.534.41
OS: Linux x64 4.19.12-arch1-1-ARCH

當您讓 Python 運行您的hello.py ,PVSC 正在使用終端運行python proj/main/hello.py 對於 Python 來說,這與從proj/main目錄運行python hello.py相同,這意味着解釋器甚至看不到hello.py包含在其中的包(因此它沒有proj.util概念)。

不使用.env文件,因為該文件只是在終端中直接執行,您的終端或 Python 都不會讀取.env文件。 但是,當您使用調試器時,我們可以指定諸如使用.env文件之類的詳細信息,因此調試器會按照您的預期設置PYTHONPATH

只需將這些行添加到要執行的文件的頂部

if __name__ == "__main__":
    import os
    import sys
    sys.path.append(os.getcwd())

這些腳本在直接執行時將文件所在的目錄添加到您的路徑中,其中__name__ == "__main__"意味着。

TLDR:使用正確的 PYTHONPATH 啟動你的 VS Code

我的設置:更改為項目目錄時,使用 direnv ( https://direnv.net/ ) 自動從 .env 設置項目特定的 PYTHONPATH。 這也為項目設置了所需的虛擬環境。 從命令行啟動 VS Code,以便它使用正確的環境變量。

或者,您可以創建一個 shell 腳本來設置正確的環境變量並啟動 VS Code。

免責聲明:我在我的包中使用絕對導入,這沒有使用相對導入進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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