Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在pip安装上被拒绝许可,除非“当”--“用户”;命令末尾是否包含?_Python_Terminal_Pip_Installation - Fatal编程技术网

Python 为什么在pip安装上被拒绝许可,除非“当”--“用户”;命令末尾是否包含?

Python 为什么在pip安装上被拒绝许可,除非“当”--“用户”;命令末尾是否包含?,python,terminal,pip,installation,Python,Terminal,Pip,Installation,我使用pip安装在我的macos终端上安装各种python软件包。如果我在结尾没有包含“-user”,我会一直收到通知,说有一个“EnvironmentError:[Errno 13]权限被拒绝”。但是,如果我在最后包含--user,我就可以安装软件包了。然而,在我使用终端和Python的其他苹果电脑上,我安装软件包没有问题,也不需要在末尾添加“-user” 为什么这里有区别?为什么我需要为一台Mac笔记本电脑而不是其他笔记本电脑在pip安装结束时包含--user命令? 激活虚拟环境后,pip

我使用pip安装在我的macos终端上安装各种python软件包。如果我在结尾没有包含“-user”,我会一直收到通知,说有一个“EnvironmentError:[Errno 13]权限被拒绝”。但是,如果我在最后包含--user,我就可以安装软件包了。然而,在我使用终端和Python的其他苹果电脑上,我安装软件包没有问题,也不需要在末尾添加“-user”

为什么这里有区别?为什么我需要为一台Mac笔记本电脑而不是其他笔记本电脑在pip安装结束时包含--user命令?

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

  • pip安装--用户垃圾邮件
    试图安装到用户软件包目录中。这将始终位于主目录下的某个位置,因此您应该始终对其具有写入权限

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

    • 苹果预先安装的Python不会给您对其站点包的写入权限。
      • sudo pip install spam
        将允许您通过以root用户身份安装来忽略权限,尽管在某些Python安装中可能会导致其他问题
    • 如果不使用默认设置,则Homebrew、Python.org和Anaconda/Miniconda会授予您对其网站包的写入权限。
      • 显然,如果您知道自己在做什么,就不要使用默认值
    • 不太常见的安装方式(Enthow、从源代码构建、MacPorts等),您应该阅读相应的文档
因此,最有可能的情况是,您在
pip-install-spam
工作的机器上使用了第三方Python和/或活动虚拟环境,但在那些不工作的机器上使用了苹果的预安装Python

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

  • 在最新版本的macOS上,苹果预装的Python及其预装的软件包已经严重过时
  • 预先安装的软件包设置为使用弃用的
    easy\u install
    而不是
    pip
    进行维护,因此让它们更新可能是一件非常痛苦的事情
  • 如果你把事情搞得一团糟,你可以破坏一些操作系统依赖的系统脚本
  • 您的更改可以通过macOS系统更新撤消
因此,一个更好的解决方案是,如果可以的话,安装Homebrew/Anaconda/Python.org Python,如果可以的话,还可以使用虚拟环境,如果不能的话,尽可能使用
--user
。这三种方法中的任何一种都能解决你的问题,但你真的应该把它们都做到


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

您的Python版本可能安装在只有root用户才能访问的目录中。
--user
标志提示它在您的用户目录中安装软件包(并且,仅针对当前用户),而不是在其安装目录中安装。以root用户身份运行它应该可以解决这个问题,但是使用
--user
并没有什么“错误”。苹果预先安装的Python需要
sudo-pip
。但你很少想在当前的macOS上使用苹果公司预装的Python。即使您想要2.7而不是更新的Python,您也可能希望使用自制、Python.org安装程序或Anaconda/Miniconda安装它,如果您使用默认安装设置,它们都不需要sudo。