【问题标题】:pip/python: normal site-packages is not writeablepip/python:普通站点包不可写
【发布时间】:2020-01-31 02:16:18
【问题描述】:

我有一个新的 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)。

【问题讨论】:

  • 我也遇到了这个问题。我想知道这是否与 Python 2.7 支持的结束有关
  • 你确定你使用的是正确的pip吗?如果您使用更安全的python -m pip install .... 会怎样?
  • @TomdeGeus:好吧,在这种情况下是python3 -m pip install ...,但是是的,当涉及多个Python版本时,通过“执行模块”方法调用pip要安全得多,所以你知道您正在使用预期的 Python 可执行文件。
  • 为了解决这个问题,我最终卸载了 python3(之前使用 brew 安装)并使用 pyenv 来安装 python3。现在一切正常。遵循本指南:opensource.com/article/19/5/python-3-default-mac(跳到最后一节)

标签: python pip


【解决方案1】:

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)

python3 -m pip install --upgrade pip

默认为用户安装,因为普通站点包不可写
已满足要求:点入 /home/USERNAME/.local/lib/python3.6/site-packages (20.3.1)

python3.7 -m pip install --upgrade pip

收集点
缓存条目反序列化失败,条目被忽略
使用缓存的https://files.pythonhosted.org/packages/ab/11/2dc62c5263d9eb322f2f028f7b56cd9d096bb8988fcf82d65fa2e4057afe/pip-20.3.1-py2.py3-none-any.whl
安装采集包:pip 安装成功 pip-20.3.1

【讨论】:

  • 是的...python3 有问题,但切换到调用python3.9 解决了问题。痛苦……
【解决方案2】:

最好不要直接使用系统提供的 Python。不用管那个,因为操作系统可能会以不希望的方式更改它,正如您所经历的那样。

最佳做法是使用virtualenv(适用于 Python 2)或venv,可能通过poetry(适用于 Python 3)配置您自己的 Python 版本并在每个项目的基础上管理它们.这消除了对系统提供的 Python 版本的所有依赖,并将每个项目与机器上的其他项目隔离开来。

如果需要,每个项目都可以有不同的 Python 点版本,并获得自己的 site_packages 目录,因此 pip 安装的库也可以按项目有不同的版本。这种方法可以避免主要问题。

【讨论】:

  • 我有同样的问题,我也有 venv 集。我必须做的是在我的虚拟环境“venv”中执行 pip,如下所示:.venv/bin/pip install -r pypackages.txt
  • @chris-johnson:你说的一切都有道理,但我该怎么做呢?在我的新 MBP M1 上,当我尝试在 venv 中执行 pip3 install gjango 时,我收到以下错误消息:Defaulting to user installation because normal site-packages is not writeable ERROR: Could not find a version that satisfies the requirement gjango (from versions: none) ERROR: No matching distribution found for gjango
【解决方案3】:

正如 @TomdeGeus 在 cmets 中提到的,这个命令对我有用:

Python 3:

python3 -m pip install [package_name]

Python 2:

python -m pip install [package_name]

【讨论】:

  • tnx 人。在命令开头添加 python 对我有帮助
  • 我有这个问题,即使我正在使用这个答案中的命令
【解决方案4】:

对于 2022 年认为自己不小心更新系统的读者pip

如果您在终端输出中看到此信息:

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)

【讨论】:

    【解决方案5】:

    sudo pip 安装

    为我工作。但不建议 pip install 与 sudo 一起运行。我在 BIGSUR 上遇到的问题是,它使用的是系统 python。一旦我使用

    安装了python 3.9

    brew install python@3.9

    然后 pip 工作正常

    【讨论】:

      【解决方案6】:

      在我的 Linux 上,conda env 目录的所有权已更改为另一个 Linux 用户(长话短说),因此由于权限问题,普通的 site-packages 不可写。

      解决方案是将所有权更改回执行pip install 的用户。

      【讨论】:

        【解决方案7】:

        在全新安装 Debian 9.12 时遇到同样的问题。 重启我的服务器解决了这个问题。

        【讨论】:

          【解决方案8】:

          我在 Ubuntu 上使用 Anaconda,遇到了同样的问题。我通过以下步骤修复了它:

          停用当前环境

          conda deactivate
          

          然后,基础环境启动。我也停用了基本 conda 环境。为此,我再次使用了conda deactivate

          最后,我通过以下命令直接激活我的项目环境(而不是从基础环境激活)。之后,我成功安装了预期的软件包并完美运行。

          conda activate myenv
          pip install somepackage
          

          【讨论】:

            【解决方案9】:

            当我的虚拟环境文件夹名称为:venv 时,我会遇到这种情况。

            在这种情况下,它会给出如下错误:

            No module pip

            Default folder is unwritable

            重命名文件夹解决问题。

            【讨论】:

            • 将命令更改为python -m venv my-venv时对我来说完美无缺
            【解决方案10】:

            在我的情况下,python3 -m pip install [package_name] 没有解决这个问题。 就我而言,这是与占用目录的其他进程有关的问题。 我重新启动 Pycharm 并关闭可能占用此文件夹的任何其他程序,并成功重新安装了 site-packages 目录中的包。

            【讨论】:

              【解决方案11】:

              当我遇到这个问题时,我已经尝试了所有提到的方法,但它们似乎不起作用。

              相反,在我的 VSCode 中重新启动 Python 语言服务器完成了这项工作 - 现在找到了我的 SimPy 包。在 Mac 上是 Cmd+Shift+P 并选择“Python: Restart Language Server”。

              【讨论】:

                【解决方案12】:

                我遇到了完全相同的问题。

                我只需输入sudo python3.8 -m pip install ....,错误就消失了。

                如果我删除 sudo,问题仍然存在。

                【讨论】:

                  【解决方案13】:

                  在 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 安装,如果您想知道如何修复它,请参见下文。

                  无论如何,我的问题的解决方案是明确指向 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 包还在:

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

                  所以我不得不重新安装才能解决问题:

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

                  【讨论】:

                    猜你喜欢
                    • 2021-01-31
                    • 2019-03-31
                    • 2021-04-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-09-17
                    • 1970-01-01
                    • 2021-07-11
                    相关资源
                    最近更新 更多