2

我使用 pip install 在我的 Mac OS 终端上安装各种 python 包。如果我最后没有包含“--user”,我会一直收到通知,指出存在“EnvironmentError: [Errno 13] Permission Denied”。但是,如果我最后包含 --user,我可以安装软件包。但是,在我使用终端和 Python 的其他 Apple 计算机上,安装软件包没有问题,我不需要在末尾添加“--user”。

为什么这里有区别?为什么我需要在我的 pip install 命令的末尾包含一台 Mac 笔记本电脑而不是其他笔记本电脑?

4

1 回答 1

1
  • 激活虚拟环境后,pip install spam尝试安装到虚拟环境的站点包中。这几乎总是在您拥有写入权限的地方。

  • pip install --user spam尝试安装到用户包目录。这将始终位于您的主目录下,因此您应该始终拥有它的写入权限。

  • pip install spam尝试将文件安装到您的 Python 安装的 site-packages 目录中。这通常不在您的主目录中(通常位于 中的某个位置/Library),因此您可能有也可能没有写权限。

    • Apple 预装的 Python授予您对其站点包的写入权限。
      • sudo pip install spam将让您通过以 root 身份安装来忽略权限,尽管在某些 Python 安装中可能会导致其他问题。
    • 如果您不使用默认设置,Homebrew、Python.org 和 Anaconda/Miniconda确实会授予您对其站点包的写入权限。
      • 显然,如果您知道自己在做什么,请不要使用默认值。
    • 不太常见的安装方式(Enthought、从源代码构建、MacPorts 等),您应该阅读相应的文档。

因此,最有可能的是,您在工作的机器上使用了第三方 Python 和/或活动的虚拟环境pip install spam,但您在不工作的机器上使用了 Apple 预装的 Python。

虽然您可以通过使用来解决这个问题sudo,但您可能不想这样做,原因如下:

  • 在最新版本的 macOS 上,Apple 预装的 Python 以及他们预装的软件包都已经过时了。
  • 预安装的软件包设置为使用已弃用的easy_install而不是pip.
  • 如果你把事情搞砸了,你可以破坏操作系统所依赖的一些系统脚本。
  • 您的更改可以通过 macOS 系统更新来撤消。

因此,一个更好的解决方案是尽可能安装 Homebrew/Anaconda/Python.org Python,并且尽可能使用虚拟环境,并且--user尽可能使用虚拟环境。这三个中的任何一个都可以解决你的问题,但你真的应该做所有这些。

然后,如果你不小心尝试在 Apple 的站点包中安装某些东西,你会得到一个权限错误——但这是一件好事;这意味着您实际上并没有更改任何内容,因此您无需撤消任何操作。

于 2018-08-28T22:46:10.160 回答