小编典典

为什么没有Python和pip的sudo不能做一些事情?

python

当我使用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'

尝试通过以下方式安装flask时pip3 install flask

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

阅读 210

收藏
2020-12-20

共1个答案

小编典典

sudo在Unix / Linux系统中用于在另一个用户中使用
权限(例如,写入某些目录的能力)来执行任务。当您不指定要模拟的用户时(例如在运行时)

sudo pip install flask

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

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

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

看到/usr和之间有空格local/吗?您刚刚开始删除整个/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 ...,如果你在开始你的home目录得到黄色一点消息有关权限)。您的所有模块都将安装至/usr/local/lib/python3.4/dist- packages系统上的所有用户,并且可供所有用户使用。

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

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

因此,请看一下这些选项,然后看看哪种最适合您的系统和您的特定情况。祝好运!

2020-12-20