Проблемы с пипом. Не удалось установить пакеты из-за среды.

Я думаю, что у меня есть некоторые проблемы с Python и/или pip на моем Mac. У меня 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 -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 -H flag.

Но я подумал, что не рекомендуется устанавливать соединение с sudo?

Это ошибки, которые я получаю, когда пытаюсь 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 и установить Fabric3 с помощью команды sudo, но я бы этого не сделал.

Я должен добавить, что у Ive не было никаких других проблем с установкой других пакетов в глобальном масштабе в Python2.7 или в envs.

Ответы

Ответ 1

Ошибка 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

Ответ 2

Вы можете сделать pip для установки пакета в расположении библиотеки virtualenv:

sudo -H venv/bin/pip install fabric