激活虚拟环境后,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 的站点包中安装某些东西,你会得到一个权限错误——但这是一件好事;这意味着您实际上并没有更改任何内容,因此您无需撤消任何操作。