为什么我不能在没有使用Python和pip的sudo的情况下做一些事情?

Vic*_*nez 7 python sudo pip virtualenv

当我使用pip时,它通常在没有sudo的情况下不起作用.我经常看到人们使用没有sudo的pip,所以我做错了什么?

我读过不建议用sudo安装pip包.我知道virtualenv我可以使用没有sudo的pip,但要安装virtualenv我必须首先使用sudo.

当我尝试安装没有sudo的pip时,我得到:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip'
Run Code Online (Sandbox Code Playgroud)

尝试安装烧瓶时pip3 install flask:

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/werkzeug'
Run Code Online (Sandbox Code Playgroud)

小智 10

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

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip'
Run Code Online (Sandbox Code Playgroud)

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

你的系统安装了python,为了修改系统的python你必须使用sudo或者是root用户.

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

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


Mat*_*DMo 7

sudo在Unix/Linux系统中用于执行作为另一个用户的任务,使用他们的权限,例如写入某些目录的能力.如果未指定要模拟的用户,例如运行时

sudo pip install flask
Run Code Online (Sandbox Code Playgroud)

您正在尝试以系统管理员身份运行该命令,root在许多环境中称为该命令.系统会要求您输入管理员密码(如果您已授予用户管理员权限,则可以是您自己的密码),然后指定的命令将以该用户身份运行,这意味着它对每个文件和目录都具有读/写访问权限在系统上(有一些例外,但它们主要是极端情况,在这里不是很重要).这意味着在使用时需要格外小心sudo,因为像单个空间一样小的错误可能会让事情变得更糟:比较

sudo rm -rf /usr/local/lib/python3.4/dist-packages/numpy*
Run Code Online (Sandbox Code Playgroud)

sudo rm -rf /usr /local/lib/python3.4/dist-packages/numpy*
Run Code Online (Sandbox Code Playgroud)

看到/usr和之间的空间local/?您刚开始删除整个/usr文件夹,其中包含系统中的大部分重要文件和程序.希望你有备份!现在,这并不意味着你需要害怕死亡sudo,但你需要有它一个健康的尊重.

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

ls -l /usr/local/lib/python3.4 
Run Code Online (Sandbox Code Playgroud)

你会看到类似的东西

drwxrwsr-x 125 root 4096 Nov  3 00:40 dist-packages
Run Code Online (Sandbox Code Playgroud)

显示您尝试安装的目录pip所属的目录root,因此必须使用sudo.

现在,有几种方法可以解决这个问题.如果你是舒服,并且不介意修改系统的全局包,继续使用sudopip(事实上,你可能需要使用sudo -H ...,如果你在开始你的home目录得到黄色一点消息有关权限).所有模块都将安装到/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中,并根据您的小心愿创建尽可能多的环境,例如,每种环境都有不同版本的各种依赖项,因此您可以更加健壮地测试您的程序.您可以打开和关闭虚拟环境,例如,您可以在终端的不同选项卡中运行一对,例如,并行测试事物.这是我的第二位推荐,因为在激活和使用环境方面涉及(稍微)更多的工作,如果你不是很好地命名它们,你可能会对你正在做哪一个感到困惑.缺点包括缺乏系统范围的可用性,如第二个选项,以及虚拟环境需要在使用前手动激活的事实.

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