首页 > 解决方案 > Pip 问题 - 由于 EnvironmentError 无法安装软件包

问题描述

我认为我的 Mac 上的 Python 和/或 pip 存在一些问题。我已经全局安装了 Python 2.7,然后我通常设置 virtualenvs 并安装 Python3.6.4,但在最后一天左右,我遇到了 Fabric 和 SSH2 等软件包的问题,​​我要么无法安装它们,要么出现各种错误,要么当我尝试导入包时它抛出的织物。

我现在尝试删除 Fabric 并安装 Fabric3 及其引发的错误,如下所示:

Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Users/david/Documents/projects/uptimeapp/env/lib/python3.6/site-packages/Fabric3-1.14.post1.dist-info'
Consider using the `--user` option or check the permissions.

(env) Davids-MacBook-Air:uptimeapp david$ pip install fabric3 --user
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.

如果我这样做了,sudo pip install fabric 那么它会安装,但会出现以下警告:

The directory '/Users/david/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/david/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

但我认为不建议使用 sudo 进行 pip 安装?

这些是我尝试时遇到的错误pip install ssh2-python

ssh2/agent.c:569:10: fatal error: 'libssh2.h' file not found
    #include "libssh2.h"
             ^~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1

    ----------------------------------------
Command "/Users/david/Documents/projects/uptimeapp/env/bin/python3.6 -u  -c "import setuptools,   tokenize;__file__='/private/var/folders/bl/97vt48j97zd2sj05zmt4xst00000gn/T  /pip-install-mpyq41q4/ssh2-python/setup.py';f=getattr(tokenize, 'open',   open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record   /private/var/folders/bl/97vt48j97zd2sj05zmt4xst00000gn/T/pip-record-qul_k3kq/install-record.txt --single-version-externally-managed --compile -  -install-headers /Users/david/Documents/projects/uptimeapp/env/bin/../include/site/python3.6  /ssh2-python" failed with error code 1 in /private/var/folders/bl/97vt48j97zd2sj05zmt4xst00000gn/T/pip-install-mpyq41q4/ssh2-python/

我已经设法删除 Fabric 并使用 sudo 命令安装 Fabric3,但我不想这样做。

我应该补充一点,无论是在 Python2.7 中还是在 envs 中全局安装其他软件包,我都没有遇到任何其他问题。

标签: pythonpython-3.xmacospip

解决方案


permission denied引发错误是因为您已经通过使用sudo. 跑

$ sudo chown -R david:staff /Users/david/Documents/projects/uptimeapp/env

修复权限。如果您有其他权限问题,修复整个主目录的权限也许是明智之举:

$ sudo chown -R david:staff /Users/david/

现在重新安装软件包应该可以再次工作:

$ source /Users/david/Documents/projects/uptimeapp/env/bin/activate
$ (env) pip uninstall -y fabric
$ (env) pip install fabric

'libssh2.h' file not found

意思是在安装之前ssh-python,需要先安装对应的lib:

$ brew install libssh2

推荐阅读