![](/img/trans.png)
[英]Issues with running Python script from command line using venv and pyenv
[英]using Python venv from script
創建虛擬環境之后,如果您有一個shell腳本調用:
/home/user/venv/python3 <scriptname>
如何知道在沒有源激活到virtualenv(從而更改路徑)的情況下virtualenv的site-packages文件夾在哪里?
魔術發生在sys.prefix
。
注意:如果虛擬環境有效,則此值將在
site.py
更改為指向虛擬環境。 通過base_prefix
,Python安裝的值仍然可用。
site
模塊在解釋器啟動時導入(從系統路徑!),並且站點軟件包目錄以sys.prefix
附加到sys.path
。
您可以通過執行帶有-S
標志的python REPL來禁用導入站點模塊,從而親自驗證這一點。 您會發現在virtualenv中安裝的軟件包不再對import語句可見(假設它們尚未安裝在系統站點軟件包中)。
您的下一個問題可能是“但是網站本身如何知道我們是否處於靜脈感染?” 答案是啟發式的 :
虛擬環境是目錄樹,其中包含Python可執行文件和其他文件,這些文件指示它是虛擬環境。
如果一個名為“pyvenv.cfg”文件存在上述一個目錄sys.executable
, sys.prefix
和sys.exec_prefix
被設置到該目錄。 在這里實施。
Python瀏覽sys.path
中的站點包值,並且當您通過site
包執行python3
或python
時,這些值會自動設置。 在初始化期間導入的(除非通過-S
標志抑制)
您可以參考site
包文檔以獲取有關如何完成此操作的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.