簡體   English   中英

pip/python: 普通站點包不可寫

[英]pip/python: normal site-packages is not writeable

我有一台新的 Macbook - 一個用戶安裝了它,然后我安裝了一個新用戶(我的),授予管理員權限並刪除了舊用戶。 我在 OS Catalina 上。

自安裝以來,我遇到了幾個權限問題。 VSCode 找不到 Jupyter Notebook, pip~/Library/Python/3.7/site-packages安裝包。

當我執行which python3時,我得到usr/bin/python3 當我執行pip3 install <package>時,我得到: Defaulting to user installation because normal site-packages is not writeable然后它說它已經安裝,即使我在執行import <package>時無法訪問它。

很明顯這是一個權限問題, pip無法安裝到“基本”python,並且它們python找不到我安裝到~/Library/Python/3.7/site-packages中的內容。

我試過重新安裝操作系統,但由於我沒有進行全新安裝,所以它沒有任何改變。 我錯過了什么? 我究竟該如何修復權限? 在哪里安裝包(當然是venv ,但我想要全局的一些包(比如jupyter )。

正如@TomdeGeus 在評論中提到的,這個命令對我有用:

蟒蛇3:

python3 -m pip install [package_name]

蟒蛇2:

python -m pip install [package_name]

最好不要直接使用系統提供的Python。 不用管它,因為操作系統可能會以不希望的方式更改它,正如您所經歷的那樣。

最佳實踐是配置您自己的 Python 版本並使用virtualenv (對於 Python 2)或venv (對於 Python 3)在每個項目的基礎上管理它們。 這消除了對系統提供的 Python 版本的所有依賴,並將每個項目與機器上的其他項目隔離開來。

如果需要,每個項目都可以有不同的 Python 點版本,並獲得自己的site_packages目錄,因此 pip 安裝的庫也可以按項目具有不同的版本。 這種方法是一個主要的問題回避者。

python3.7 -m pip install [package_name]

(當然,您應該使用您擁有的版本)

為我解決了。

投票最多的答案python3 -m pip install [package_name]在這里對我沒有幫助。

就我而言,這是由與默認安裝的主導 3.6 版本沖突引起的。 您可能會問自己為什么系統上有 3.6,您現在很可能不會使用該版本。 原因是 3.6 被用作許多軟件包安裝程序的獨立默認 python 版本。 這些安裝程序不想檢查您使用的是哪個版本以及它是否適合,他們只是使用 3.6 作為默認版本,無論您喜歡與否。

這是一個示例的證明--upgrade pip

pip3 install --upgrade pip

默認為用戶安裝,因為普通站點包不可寫
已滿足要求:/home/USERNAME/.local/lib/python3.6/site-packages (20.3.1) 中的 pip

python3 -m pip install --upgrade pip

默認為用戶安裝,因為普通站點包不可寫
已滿足要求:/home/USERNAME/.local/lib/python3.6/site-packages (20.3.1) 中的 pip

python3.7 -m pip install --upgrade pip

收集點子
緩存條目反序列化失敗,條目被忽略
使用緩存的https://files.pythonhosted.org/packages/ab/11/2dc62c5263d9eb322f2f028f7b56cd9d096bb8988fcf82d65fa2e4057afe/pip-20.3.1-py2.py3-none-any.
安裝收集到的包:pip 成功安裝pip-20.3.1

當我的虛擬環境文件夾名稱是: venv時,它發生在我venv

在這種情況下,它會給出如下錯誤:

No module pip

Default folder is unwritable

重命名文件夾解決問題。

須藤點安裝

為我工作。 但是不建議使用 sudo 運行 pip install。 我在 BIGSUR 上面臨的問題是,它使用的是系統 python。 一旦我安裝了 python 3.9 使用

brew 安裝 python@3.9

然后 pip 工作正常

對於 2022 年認為自己意外更新系統pip的讀者:

如果您在終端 output 中看到此信息:

Defaulting to user installation because normal site-packages is not writeable

那么你會沒事的。 使用剛剛更新的pip3運行:

pyenv global system # since I use pyenv
pip3 uninstall pip # this one does the trick

然后您可以再次檢查pip3 --version將指向原來的舊 (XCode/System-) pip 例如(2022 年 2 月 28 日):

pip 20.2.3 from /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)

對我來說,這些建議都沒有用,所以我不得不刪除當前的虛擬環境文件夾venv並使用以下命令之一重新創建它:

python -m venv venv
python3 -m venv venv

檢查 Ubuntu 20.04 上的 pip 源

which pip

返回正確的路徑

/home/myname/fullstack/person_api/venv/bin/pip

更新

我認為有些人可能會遇到這個問題,因為他們在~/.bashrc中將 python 路徑設置為這樣的環境變量:

python=/path/to/python

你不應該這樣做:相反,我們可以這樣做:

py=python
PATH=/path/to/python:$PATH

我就是因為這個才遇到這個問題的!

檢查命令行“which python”,看看它是否是您期望的值。 如果您激活了虛擬環境,請檢查 /venv/bin/activate 以查看 VIRTUAL_ENV= 的值並確保它是正確的路徑。 如果您重命名或移動項目,路徑可能是錯誤的。 如果路徑不對,可以刪除venv,重新做一個。

在全新安裝的 Debian 9.12 上有同樣的問題。 重新啟動我的服務器解決了這個問題。

在我的情況下python3 -m pip install [package_name]沒有解決這個問題。 就我而言,這是與占用目錄的其他進程相關的問題。 我重新啟動 Pycharm 並關閉可能占用此文件夾的任何其他程序,並成功地在 site-packages 目錄中重新安裝了該包。

我在 Ubuntu 上使用 Anaconda 並遇到了同樣的問題。我通過以下步驟修復了它:

停用當前環境

conda deactivate

然后,基礎環境激活。 我也停用了基本的 conda 環境。 為此,我再次使用了conda deactivate

最后,我通過以下命令直接激活我的項目環境(而不是從基礎環境激活)。 之后,我成功安裝了預期的軟件包並完美運行。

conda activate myenv
pip install somepackage

當我遇到這個問題時,我嘗試了所有提到的方法,但它們似乎不起作用。

相反,在我的 VSCode 中重新啟動 Python 語言服務器完成了這項工作 - 現在找到了我的SimPy包。 在 Mac 上,它是Cmd+Shift+P並選擇“Python:重新啟動語言服務器”。

嘗試sudo pip install <package_name>

出於某種原因,用戶無法修改 site-packages 文件夾。

就我在 Linux 上的情況而言,conda env 目錄的所有權已更改為另一個 Linux 用戶(長話短說),因此由於權限問題,普通site-packages不可寫。

解決方案是將所有權更改回執行pip install的用戶。

我遇到了完全相同的問題。

我只需輸入sudo python3.8 -m pip install ....錯誤就消失了。

如果我刪除sudo ,問題仍然存在。

在 VirtualBox 中的 Ubuntu 20.04.4 LTS 上有類似的問題,但這里的建議都沒有對我有用。

我試圖在 venv 中安裝 open3d,每次我得到“默認為用戶安裝,因為普通的站點包不可寫”,起初我什至沒有注意到。 open3d 總是安裝在 /usr/bin/python3 環境中。 我已經重新啟動了 VM,但沒有運氣,所以我猜問題不僅僅是缺少寫訪問權限。

因此,在使用 venv 的 VS Code 中,無法導入 open3d。 但是使用python3 -c "import open3d as o3d; print(o3d.__version__)"從激活的 venv 從終端進行測試工作正常,這讓我完全困惑。 我什至使用 sudo 破壞了我的系統 pip 安裝,如果您想知道如何修復它,請參見下文。

無論如何,我的問題的解決方案是明確指向我想要安裝 package 的 venv 中的 python3 文件:

venv/bin/python3 -m pip install open3d

所以我測試了所有東西,最終用 sudo 安裝: sudo pip3 install open3d 這當然沒有解決問題,並且 venv 中仍然缺少 open3d。 更糟糕的是,我收到了消息:

“警告:您使用的是 pip 版本 21.3.1;但是,版本 22.0.4 可用。您應該考慮通過 '/usr/bin/python3 -m pip install --upgrade pip' 命令進行升級。”

所以我做到了,但使用 sudo,更新系統 pip 然后在這里發現這不好:

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

按照這里的建議,我嘗試恢復到原始版本,但 pip3 壞了:

sudo pip3 uninstall pip
sudo pip3 --version
sudo: pip3: command not found

apt package 仍然存在:

sudo apt install python3-pip python3-pip 已經是最新版本(20.0.2-5ubuntu1.6)。

所以我不得不重新安裝來解決這個問題:

sudo apt-get remove python3-pip
sudo apt install python3-pip

也許你有pythonpython3pippip3別名。 在這種情況下, pip可能無法再正常工作,因為別名並不總是可用,因此pip / pip3可能會以與終端不同的方式解析python / python3

這可能會導致pip / pip3嘗試安裝在系統 python 中,這可能會導致您的錯誤。

我嘗試過這里描述的單一建議。 在每種情況下,我都會得到完全相同的結果: SyntaxError: invalid syntax (<stdin>, line 1)

我不確定是誰設計了這樣的系統,但根據我目前的經驗,它似乎基本上沒用。 要么創建一個有效的系統,要么根本不創建任何東西。

對於那些在 Pi 上運行的人,不小心以 root 身份安裝了 pip。 只需將 lib 文件夾 chown 給 pi 用戶:

sudo chown -R pi:pi /usr/local/lib/python3.9/

暫無
暫無

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

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