【问题标题】:Why i can't do some things without sudo using Python and pip?为什么我不能在没有 sudo 的情况下使用 Python 和 pip 做一些事情?
【发布时间】:2016-02-28 13:57:12
【问题描述】:

当我使用 pip 时,如果没有 sudo,它通常无法工作。我经常看到有人使用 pip 而没有 sudo,那我做错了什么?

我了解到不建议使用 sudo 安装 pip 包。我知道使用virtualenv 我可以不使用sudo 使用pip,但是要安装virtualenv 我必须先使用sudo。

当我尝试不使用 sudo 安装 pip 时,我得到:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip'

尝试使用 pip3 install flask 安装烧瓶时:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/werkzeug'

【问题讨论】:

  • 我猜你是在 Linux/Unix/相同的变体上。这不是在那里做的方法。我建议你阅读virtualenv。你很有可能会搞砸 Python 的系统安装。
  • 基本上是pip install --user package-name,它将你的包放入$HOME/.local/lib/pythonx.y/site-packages/。见stackoverflow.com/questions/7143077/…

标签: python pip virtualenv sudo


【解决方案1】:

原因是您的普通用户没有修改系统目录所需的权限。就像在这条消息中一样:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip'

以下是您需要了解的简要说明:

您的系统安装了python,要修改系统的python,您必须使用sudo或者是root用户。

您可以不使用 sudo 在您的主目录中安装 python 库,但只有您(而不是系统的其他用户)才能使用它。使用pip install --user package-name 执行此操作,就像提到的公知涛一样。

您还可以在您选择的目录中创建独特的 python 安装,例如 The Laughing Man 提到的。这称为 virtualenv,我认为这是最受青睐的工作方式。

【讨论】:

  • 非常感谢您的帮助!我明白了。
【解决方案2】:

sudo 用于在 Unix/Linux 系统中以另一个用户的身份执行任务,使用 他们的 权限,例如写入某些目录的能力。当你没有指定要模拟的用户时,比如运行时

sudo pip install flask

您正尝试以系统管理员身份运行该命令,在许多环境中称为root。您将被要求输入管理员密码(可以是您自己的,如果您已授予您的用户管理员权限),然后指定的命令运行 作为该用户,这意味着它具有读/写基本上可以访问系统上的每个文件和目录(有一些例外,但它们大多是极端情况,在这里并不是很重要)。这意味着您在使用sudo 时需要格外小心,因为小到一个空格的错误真的会搞砸:比较

sudo rm -rf /usr/local/lib/python3.4/dist-packages/numpy*

sudo rm -rf /usr /local/lib/python3.4/dist-packages/numpy*

看到/usrlocal/ 之间的空格了吗?您刚刚开始删除整个 /usr 文件夹,其中包含系统上大部分重要文件和程序。希望你有备份!现在,这并不意味着您需要对sudo 感到害怕,但您确实需要对它怀有健康的尊重。

Python 安装往往是系统级的(是的,我知道有例外),这意味着您需要使用 sudo 来修改它们,例如使用 pip 安装 3rd-party 模块时。如果你跑

ls -l /usr/local/lib/python3.4 

你会看到类似

的东西
drwxrwsr-x 125 root 4096 Nov  3 00:40 dist-packages

表明您尝试使用pip 安装到的目录归root 所有,因此必须使用sudo

现在,有几种方法可以解决这个问题。如果您对此感到满意,并且不介意修改系统的全局包,请继续使用sudopip(实际上,如果您收到黄色的小消息,您可能需要使用sudo -H ...在你的主目录中的权限的开头)。您的所有模块都将安装到/usr/local/lib/python3.4/dist-packages 并可供系统上的所有用户使用。

第二个选项是使用 pip 的 --user 选项,这将在您的主目录 (~) 中创建一个 lib/python3.4/site-packages 层次结构,并将所有已安装的模块连同脚本一起存储在 ~/bin 中(您应该添加到您的$PATH。此方法的优点是您不需要使用sudo,因此您不会意外覆盖其他需要特定版本的系统相关模块程序运行。缺点是安装的模块只对您可用,因此您可能遇到问题,例如,如果您的 Web 服务器试图以自身身份运行 Flask,但不能读取源文件。但是,这不是一点配置文件编辑无法解决的问题。这是我为大多数用户推荐的解决方案。

第三种选择是使用像virtualenv 这样的虚拟环境。这将在您选择的位置创建一个自定义 Python 安装,具有 单独 python 可执行文件和 site-packages 层次结构(您可以选择是否要链接到或使用系统的dist-packages 存储库)。您可以将pip install 直接打包到virtualenv 中,并根据您的小心脏的需要创建尽可能多的环境,例如,每个环境的各种依赖项的版本都略有不同,这样您就可以更健壮地测试您的程序。您可以打开和关闭虚拟环境,例如,您可以在终端的不同选项卡中运行几个,例如并行测试。这是我的第二名建议,因为激活和使用环境涉及(稍微)更多的工作,如果你不擅长命名它们,你可能会对你在哪个环境工作感到困惑。缺点包括缺乏系统范围的可用性,如第二个选项,以及虚拟环境需要在使用前手动激活。

因此,请查看选项,看看哪些选项最适合您的系统和您的特定情况。祝你好运!

【讨论】:

  • 很好的解释,非常有用且易于理解。非常感谢。
猜你喜欢
  • 2021-04-07
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多