![](/img/trans.png)
[英]Should I uninstall all globally installed Python packages and only install them locally in VENV environments?
[英]How to install Python (dev) dependencies globally so that I don't have to reinstall them in every venv?
我希望在為每個項目創建的每個 venv(虛擬環境)中都可以使用一些 Python 依賴項。 例如黑色、flake8 和 pytest。 這可能嗎?如果可以,如何實現?
我想在我的主要Python安裝下安裝這三個,而不是在我開始一個新項目時創建的每個 venv 中重新安裝它們。 這在使用 VSCode 時特別煩人,當您切換到未安裝這些軟件包的 venv 時,它會彈出抱怨“Linter flake8 未安裝”或“...black 未安裝”等。
讓我根據@jonrsharpe 的評論回答我自己的問題。
Assuming you want to have black, flake8 and pytest available 'globally' or in other words you want to have these packages in every new venv that you create but don't want to repeat pip install black flake8 pytest
each and every time. 以下是您可以執行的操作:
--system-site-packages
選項。 例如:python -m venv --system-site-packages .venv/dev
source.venv/dev/bin/activate
並pip list
檢查軟件包是否可用注意:請參閱這些 SO 線程以獲取更多信息。
sudo pip install
如果您使用sudo pip install black
,它將污染您的全局 Python 安裝。 你不想那樣做。
你也不需要在你的 virtualenvs 中使用--system-site-packages
。 您可以出於其他原因使用它,但僅使用它以便black
等可以工作是一個壞主意。
pip install --user
停用您的 virtualenv,然后執行pip install --user black
--user
當pip
不在 venv/virtualenv 中且未以 root 身份運行時,--user 是許多系統中的默認設置)。 這將在用戶主目錄的某處安裝black
,例如$HOME/.local
。
無論您激活了哪個 venv/virtualenv,以及是否使用--system-site-packages
創建了 venv/virtualenv,您隨后都可以運行black
。
為什么會這樣:如果你想在你的代碼中import black
,這在 venv/virtualenv 中不起作用(除非使用--system-site-packages
),因為black
安裝在“系統范圍內”,盡管在用戶的主目錄(在這種情況下,“用戶范圍”將是更正確的術語)。 但是您不想import black
; 你想要的是執行black
命令,無論你激活了哪個 venv/virtualenv,這都會起作用,因為對於你的 shell, black
只是它可以在路徑中找到的命令,就像ls
或more
(它在$HOME/.local/bin
,應該在PATH
中)。 這幾乎適用於您要安裝“系統范圍”的所有內容(即在任何 venv/virtualenv 之外): shell 命令,如black
、 flake8
和pytest
。
如果您查看$HOME/.local/bin/black
,您會發現它的第一行類似於#!/usr/bin/python3
。 這意味着它使用系統范圍的 python 安裝,而不是 venv/virtualenv。 (如果它是#!/usr/bin/env python
那么它將使用激活的 venv/virtualenv。)
pipx
上述解決方案的問題在於它污染了您的“用戶范圍”python 安裝,這幾乎就像污染了您的系統范圍安裝。 您可以改為執行此操作(停用 venvs/virtualenvs):
pip install --user pipx
pipx install black
pipx
所做的是它專門為black
創建一個 venv 並在該 venv 中安裝black
。 它創建的$HOME/.local/bin/black
可執行文件在該 venv 中運行為black
。 pipx uninstall black
刪除了可執行文件和 venv。
如果仍有不清楚的地方,我的文章virtualenv demystified可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.