簡體   English   中英

如何全局安裝 Python (dev) 依賴項,這樣我就不必在每個 venv 中重新安裝它們?

[英]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. 以下是您可以執行的操作:

  1. 在您的主要 Python 版本下安裝一次軟件包(您想用於您的 venvs。注意:您安裝了幾個 Python 版本。)
  2. 創建新的 venv 時使用--system-site-packages選項。 例如:
python -m venv --system-site-packages .venv/dev
  1. 激活您的 venv,即source.venv/dev/bin/activatepip list檢查軟件包是否可用

一種可能的解決方案是,

  • 停用虛擬環境。
  • 安裝您需要在全球范圍內可用的所有軟件包。
  • 再次激活虛擬環境。
  • 確保您啟用從全局繼承 package

注意:請參閱這些 SO 線程以獲取更多信息。

不要使用sudo pip install

如果您使用sudo pip install black ,它將污染您的全局 Python 安裝。 你不想那樣做。

你也不需要在你的 virtualenvs 中使用--system-site-packages 您可以出於其他原因使用它,但僅使用它以便black等可以工作是一個壞主意。

中間解決方案:使用pip install --user

停用您的 virtualenv,然后執行pip install --user black --userpip不在 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只是它可以在路徑中找到的命令,就像lsmore (它在$HOME/.local/bin ,應該在PATH中)。 這幾乎適用於您要安裝“系統范圍”的所有內容(即在任何 venv/virtualenv 之外): shell 命令,如blackflake8pytest

如果您查看$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.

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