为什么我在使用Python和pip时不能执行一些操作而不使用sudo?

21 浏览
0 Comments

为什么我在使用Python和pip时不能执行一些操作而不使用sudo?

当我使用pip时,通常没有使用sudo就无法工作。我经常看到别人使用pip而不需要sudo,那我是做错了什么吗?\n我读到说不推荐使用sudo安装pip包。我知道使用virtualenv可以不用sudo来使用pip,但是要安装virtualenv时我必须先使用sudo。\n当我尝试不用sudo安装pip时,出现以下错误:\n

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

\n当尝试用pip3 install flask安装flask时:\n

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

0
0 Comments

在Unix/Linux系统中,sudo命令用于以另一个用户的权限执行任务,例如写入特定目录的能力。当你不指定要模拟的用户时,比如运行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安装第三方模块。如果你运行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将包安装到虚拟环境中,并且可以创建尽可能多的环境,每个环境中的各种依赖项版本略有不同,这样你就可以更加稳健地测试你的程序。你可以打开和关闭虚拟环境,例如,你可以在终端的不同标签中运行一些虚拟环境,以并行测试不同的东西。这是我的次推荐解决方案,因为在激活和使用环境时需要(稍微)更多的工作,并且如果你在命名上不太好的话,可能会混淆你正在使用的环境。缺点包括缺乏系统范围的可用性,和虚拟环境在使用前需要手动激活。

所以,看一下这些选择,看看哪个最适合你的系统和你的特定情况。祝你好运!

非常好的解释,非常有用和易于理解。非常感谢。

0
0 Comments

为什么我在使用Python和pip时无法执行某些操作而需要sudo?

原因是您的普通用户没有修改系统目录所需的权限,就像以下消息一样:

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

以下是您需要了解的简要情况:

您的系统已安装了Python,为了修改系统的Python,您必须使用sudo或成为root用户。

您可以在您的主目录中安装Python库而无需使用sudo,但只有您(而不是系统的其他用户)才能使用它。像gongzhitaao提到的那样,可以使用pip install --user package-name来实现这一点。

您还可以在您选择的目录中创建独立的Python安装,就像The Laughing Man提到的那样。这被称为虚拟环境,我认为这是最受欢迎的工作方式。

非常感谢您的帮助!我明白了。

0