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,我认为这是最受欢迎的工作方式.
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.
现在,有几种方法可以解决这个问题.如果你是舒服,并且不介意修改系统的全局包,继续使用sudo与pip(事实上,你可能需要使用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中,并根据您的小心愿创建尽可能多的环境,例如,每种环境都有不同版本的各种依赖项,因此您可以更加健壮地测试您的程序.您可以打开和关闭虚拟环境,例如,您可以在终端的不同选项卡中运行一对,例如,并行测试事物.这是我的第二位推荐,因为在激活和使用环境方面涉及(稍微)更多的工作,如果你不是很好地命名它们,你可能会对你正在做哪一个感到困惑.缺点包括缺乏系统范围的可用性,如第二个选项,以及虚拟环境需要在使用前手动激活的事实.
因此,请查看选项,看看哪种选择最适合您的系统和您的特定情况.祝好运!
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |