pip install -r requirements.txt
失败,但以下异常除外 OSError: [Errno 13] Permission denied: '/usr/local/lib/...
。出了什么问题以及如何解决这个问题? (我正在尝试设置 Django)
Installing collected packages: amqp, anyjson, arrow, beautifulsoup4, billiard, boto, braintree, celery, cffi, cryptography, Django, django-bower, django-braces, django-celery, django-crispy-forms, django-debug-toolbar, django-disqus, django-embed-video, django-filter, django-merchant, django-pagination, django-payments, django-storages, django-vote, django-wysiwyg-redactor, easy-thumbnails, enum34, gnureadline, idna, ipaddress, ipython, kombu, mock, names, ndg-httpsclient, Pillow, pyasn1, pycparser, pycrypto, PyJWT, pyOpenSSL, python-dateutil, pytz, requests, six, sqlparse, stripe, suds-jurko
Cleaning up...
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
requirement.install(install_options, global_options, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
self.move_wheel_files(self.source_dir, root=root)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
pycompile=self.pycompile,
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
clobber(source, lib_dir, True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
os.makedirs(destsubdir)
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/amqp-1.4.6.dist-info'
与其将
sudo
与 pip install
一起使用,不如先尝试 pip install --user
。如果失败,请查看置顶帖子此处。
不应该使用
sudo
的原因如下:
当您使用
sudo
运行pip时,您将以root用户身份运行来自互联网的任意Python代码,这是一个相当大的安全风险。如果有人在 PyPI 上发布了恶意项目并且您安装了它,您就为攻击者提供了对您计算机的 root 访问权限。
virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install --user -r requirements.txt
我的建议使用安全(a)选项,以便该项目的需求不会干扰其他项目的需求。
您正在尝试在系统范围的路径上安装软件包,但没有这样做的权限。
一般可以使用
sudo
sudo pip install -r requirements.txt
了解更多关于
sudo
实际上,这是一个坏主意,并且没有好的用例,请参阅@wim 的评论。
如果您不想进行系统范围的更改,您可以使用 --user
标志将软件包安装在您的
per-user路径上。
所需要的只是:
pip install --user runloop requirements.txt
最后,为了实现更细粒度的控制,您还可以使用virtualenv,这可能是开发环境的最佳解决方案,特别是当您正在处理多个项目并希望跟踪每个项目时依赖关系。
使用
激活您的 virtualenv 后$ my-virtualenv/bin/activate
以下命令将在 virtualenv 中安装软件包(而不是在系统范围的路径上):
pip install -r requirements.txt
$ pip install --user <package-name>
或者如果在需求文件上运行 pip ...
$ pip install --user -r requirements.txt
这些对于每个 pip 安装(包括创建虚拟环境)都能可靠地工作。
但是,根据我的进一步经验
,最干净的解决方案是在系统级别安装 python-virtualenv
和
virtualenvwrapper
以及 sudo apt-get install
。 然后,在虚拟环境中,使用不带
pip install
标志的
--user
以及不带 sudo
的 AND。整体上更清洁、更安全、更轻松。sudo chown -R $USER /absolute/path/to/directory
所以你应该授予权限,然后尝试再次安装它,如果你有新的路径你也应该授予权限:
sudo chown -R $USER /usr/local/lib/python2.7/
sudo python -m pip install --user -r package_name
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org PACKAGE_NAME --user
或
pip install --user <package name>
示例:
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org matplotlib --user
在虚拟环境文件夹中找到
pyvenv.cfg
include-system-site-packages
deactivate
source environment_name/bin/activate
,我遵循了 Google Cloud 帮助文档中列出的 此解决方法,您可以在主目录中创建一个 .pydistutils.cfg 文件。该文件具有特殊配置,您只能将其用于安装某些库。我应该在安装软件包后删除 disutils.cfg 文件,但我忘记这样做了。所以对我来说解决办法实际上只是......
rm ~/.pydistutils.cfg
。
然后一切正常。当然,如果您出于真正的原因在该文件中进行了一些配置,那么您不会只想直接 rm 该文件。但万一其他人做了这个解决方法,并且忘记删除该文件,这对我来说是成功的!
sudo chown -R $USER /path to your python installed directory
默认为
/usr/local/lib/python2.7/
或者尝试一下,
pip install --user -r package_name
然后说,
pip install -r requirements.txt
这将安装在你的环境中
别说,
sudo pip install -r requirements.txt
这将安装到任意Python路径中。