当我使用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'
尝试使用pip3 install flask
安装烧瓶时:
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/werkzeug'
答案 0 :(得分:10)
原因是您的普通用户没有修改系统目录所需的权限。就像在这条消息中一样:
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip'
以下简要介绍了您需要了解的内容:
你的系统安装了python,为了修改系统的python,你必须使用sudo或者是root用户。
您可以在不使用sudo的情况下在主目录中安装python库,但只有您(不是系统的其他用户)才能使用它。用{jongzhitaao提到的pip install --user package-name
来做这件事。
您还可以在您选择的目录中创建独特的python安装,例如The Laughing Man提到的。这被称为virtualenv,我认为这是最受欢迎的工作方式。
答案 1 :(得分:7)
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*
查看/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
。
现在,有几种方法可以解决这个问题。如果您对此感到满意,并且不介意修改系统的全局包,请继续使用sudo
pip
(事实上,如果您使用sudo -H ...
在开头有一个关于主目录中权限的黄色小消息)。您的所有模块都将安装到/usr/local/lib/python3.4/dist-packages
,并可供系统上的所有用户使用。
第二个选项是使用pip的--user
选项,它将在您的主目录(lib/python3.4/site-packages
)中创建~
层次结构,并在其中存储所有已安装的模块,以及{ {1}}(您应该将其添加到~/bin
。此方法的优点是您不需要使用$PATH
,因此您不会意外覆盖系统相关模块,其中运行其他程序需要特定版本。缺点是已安装的模块仅供您使用,因此可能会遇到问题,例如,如果您的Web服务器我试图将Flask作为自己运行,并且无法读取源文件。但是,这不是一个小配置文件编辑无法解决的问题。这是我推荐的大多数用户的解决方案。
第三种选择是使用virtualenv
之类的虚拟环境。这将在您选择的位置创建自定义Python安装,使用单独的 sudo
可执行文件和python
层次结构(有关于是否要链接的选项)或使用系统的site-packages
存储库)。您可以dist-packages
直接打包到virtualenv中,并根据您的小心愿创建尽可能多的环境,每个环境都有不同版本的各种依赖项,例如,这样您就可以更加健壮地测试您的程序。您可以打开和关闭虚拟环境,例如,您可以在终端的不同选项卡中运行一对,例如,并行测试事物。这是我的第二位推荐,因为在激活和使用环境方面涉及(稍微)更多的工作,如果你不是很擅长命名,你可能会对你正在做的工作感到困惑。缺点包括缺乏系统范围的可用性,如第二个选项,以及虚拟环境需要在使用前手动激活的事实。
因此,请查看选项,看看哪种选择最适合您的系统和您的特定情况。祝你好运!