繁体   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