Как избежать "Разрешения отказа" при использовании pip с virtualenv
Я пытаюсь развернуть пакет Python с pip
в виртуальной среде на машине Ubuntu, но столкнулся с проблемой, связанной с разрешением. Например:
(TestVirtualEnv)[email protected]:~$ pip install markdown2
завершается:
error: не удалось создать '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py': Permission denied
Я не могу sudo
, так как он установит пакет по всему миру, а не в виртуальную среду. я chown
ed site-packages
; ls
отображаются только каталоги, связанные с easy_install
, pip
и setuptools
, и ничего не связано с Markdown.
Как развернуть пакет в виртуальной среде с помощью pip
, не сталкиваясь с ошибками, связанными с правами?
Ответы
Ответ 1
virtualenv
Проблемы с разрешением могут возникать при создании virtualenv
как sudo
, а затем работать без sudo
в virtualenv
.
Как выяснилось в вашем вопросительном комментарии, решение здесь - создать virtualenv
без sudo
, чтобы иметь возможность работать (esp. write) в он без sudo
.
Ответ 2
Решение:
Если вы создали virtualenv как root, выполните следующую команду:
sudo chown -R your_username:your_username path/to/virtuaelenv/
Это, вероятно, устранит вашу проблему.
Приветствия
Ответ 3
Я не создал свой virtualenv, используя sudo. Поэтому ответ Себастьяна не касался меня. Мой проект называется utils
. Я проверил каталог utils
и увидел это:
-rw-r--r-- 1 macuser staff 983 6 Jan 15:17 README.md
drwxr-xr-x 6 root staff 204 6 Jan 14:36 utils.egg-info
-rw-r--r-- 1 macuser staff 31 6 Jan 15:09 requirements.txt
Как вы можете видеть, utils.egg-info
принадлежит root
not macuser
. Вот почему это давало мне ошибку permission denied
. Мне также пришлось удалить /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link
, поскольку он был создан root
. Я снова сделал pip install -e .
после их удаления, и он сработал.
Ответ 4
В моем случае я использовал mkvirtualenv
, но не сказал, что буду использовать python3. Я получил эту ошибку:
mkvirtualenv hug
pip3 install hug -U
....
error: could not create '/usr/lib/python3.4/site-packages': Permission denied
Он работал после указания python3:
mkvirtualenv --python=/usr/bin/python3 hug
pip3 install hug -U
Ответ 5
Вы не активировали виртуальную среду, прежде чем использовать pip.
Попробуйте:
$(your venv path) . bin/activate
И затем используйте файл pip -r requirements.txt в вашей основной папке
Ответ 6
Если вы создали виртуальную среду с использованием root, используйте эту команду
sudo su
он предоставит вам root-доступ и затем активирует вашу виртуальную среду с помощью этого
source /root/.env/ENV_NAME/bin/activate
Ответ 7
При создании virtualenv, если вы используете sudo, каталог создается с привилегиями root. Поэтому, когда вы пытаетесь установить пакет с не-sudo-пользователем, у вас не будет разрешения на установку в него.
Поэтому всегда создавайте virtualenv без sudo и устанавливайте без sudo.
Вы также можете скопировать пакеты, установленные на глобальном python, в virtualenv.
cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/