首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pip安装上的权限被拒绝,除非在命令结束时包含"--user“?

为什么pip安装上的权限被拒绝,除非在命令结束时包含"--user“?
EN

Stack Overflow用户
提问于 2018-08-28 22:07:47
回答 1查看 3.2K关注 0票数 2

我使用pip在我的Mac终端上安装各种python包。如果我最后不包括“--用户”,就会不断地通知我,有一个"EnvironmentError: Errno 13权限被拒绝“。但是,如果我最终包括--用户,我可以安装软件包。然而,在其他我使用终端和Python的苹果电脑上,我没有安装软件包的困难,我不需要在最后添加“-user”。

为什么这里有区别?为什么我需要--在我的pip安装命令的末尾为一台Mac笔记本安装命令的用户,而不是其他的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-28 22:46:10

  • 在激活虚拟环境后,pip install spam试图安装到虚拟环境的站点包中。这几乎总是在您有写权限的地方。
  • pip install --user spam试图安装到用户包目录中.这将始终在您的主目录下的某个地方,因此您应该始终对其具有写权限。
  • pip install spam试图将文件安装到站点包目录中以供您安装。这通常不在您的主目录中(通常位于/Library中的某个位置),因此您可能有或可能没有写权限。
代码语言:javascript
复制
- Apple's pre-installed Python _does not_ give you write permissions to its site-packages.  
    - `sudo pip install spam` will let you ignore the permissions by installing as root, although with some Python installations it may cause other problems.

代码语言:javascript
复制
- Homebrew, Python.org, and Anaconda/Miniconda _do_ give you write permissions to their site-packages if you leave the defaults alone.  
    - Obviously, leave the defaults alone if you know what you're doing.

代码语言:javascript
复制
- Less common ways of installing (Enthought, building from source, MacPorts, etc.), you should read the appropriate docs.

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

虽然您可以通过使用sudo来修复这个问题,但是您可能不想这样做,原因有几点:

  • 在最新版本的macOS上,苹果预装的Python及其预装的软件包已经严重过时。
  • 预先安装的软件包是用废弃的easy_install (而不是pip )来维护的,因此更新它们可能会带来巨大的痛苦。
  • 如果您把事情搞得太糟,您可以破坏操作系统所依赖的一些系统脚本。
  • 您的更改可以通过macOS系统更新来撤消。

因此,一个更好的解决方案是,如果可能的话,安装Homebrew/Anaconda/Python.org Python,并在可能的情况下使用虚拟环境,在可能的情况下使用--user。这三种方法中的任何一种都可以解决您的问题,但您确实应该做到所有这些。

然后,如果你不小心尝试在苹果的网站上安装一些东西--软件包,你会得到一个权限错误--但这是件好事;这意味着你并没有真正改变任何东西,所以你没有什么可撤销的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52066829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档