virtualenv와 함께 pip를 사용할 때 "Permission denied"를 방지하는 방법


93

pipUbuntu 머신의 가상 환경에서 Python 패키지를 배포하려고 하는데 권한 관련 문제가 발생합니다. 예를 들면 :

(TestVirtualEnv)test@testServer:~$ pip install markdown2

종료 :

오류 : '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py'를 만들 수 없습니다 : 권한이 거부되었습니다.

sudo가상 환경이 아닌 전역 적으로 패키지를 설치하므로 할 수 없습니다 . 나는 chown에드 site-packages; ls프로그램은 관련 디렉토리 easy_install, pip그리고 setuptools, 아무것도 마크 다운 관련이 없습니다.

pip권한 관련 오류없이 가상 환경에서 패키지를 배포하는 방법은 무엇입니까?


명확히하기 위해이 virtualenv를 만들었 sudo습니까?
sebastian_oe

@sebastian_oe : 그랬다고 믿습니다 . 확실히하기 위해 다시 만들겠습니다.
Arseni Mourzenko

4
그렇다면 이것이 문제 일 수 있습니다. .NET없이 virtualenv를 만들어보십시오 sudo.
sebastian_oe

1
@sebastian_oe : sudo. 실제로 패키지는 이제 올바르게 설치됩니다. 제가 수락 할 수 있도록 귀하의 의견을 답변으로 승격시킬 수 있습니까?
Arseni Mourzenko

1
또한 다른 사용자간에 전환하는 경우 virtualenv디렉터리 를 소유 한 (또는 쓰기 권한이있는) 사용자를 사용하고 있는지 확인하십시오. virtualenv다른 사용자로 활성화 할 수 있지만 패키지를 설치할 수 없으며 권한 액세스를 부여 할 것입니다.
Andrius

답변:


106

virtualenv권한 문제는 당신이를 만들 때 발생할 수 있습니다 virtualenv으로 sudo다음없이 작동 sudo에서 virtualenv.

귀하의 질문의 의견에 발견으로, 여기에 솔루션입니다 만들virtualenv 없이 sudo할 수있는 작업 (특히. 쓰기) 그것에없이 sudo.


4
sudo가 필요한 / opt에서 만들려면 virtualenv가 sudo 없이는 설치되지 않을 것이라고 생각합니다.
Umair A.

7
@sebastian_oe 나는 당신을 사랑합니다 생각
Nobbynob Littlun

5
virtualenvsudo없이 만드는 방법 ?
Tunn

를 사용하여 virtualenv를 sudo만든 경우 다시 만들지 않고 쉽게 수정하는 방법은 @vingtoft의 답변을 참조하십시오
David A

103

해결책:

virtualenv를 루트로 만든 경우 다음 명령을 실행합니다.

sudo chown -R your_username:your_username path/to/virtuaelenv/

이것은 아마도 문제를 해결할 것입니다.

건배


1
이것은 나를 위해 일했습니다 (chown /usr/local/lib/python3.4).하지만 virtualenv를 루트로 만들지 않았다고 생각하고 실제로 Python3.4를 루트로 설치했습니다. 아직 테스트 중이지만이 솔루션에서 더 이상 문제가 발생할 것이라고 생각하십니까? 아니면 이로 인해 대부분의 오류가 수정 될 것입니까?
ntk4

3
virtualenv 또는 python을 루트로 생성했는지 어떻게 알 수 있습니까?
A__

6

제 경우에는을 사용 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

sudo를 사용하여 virtualenv를 만들지 않았습니다. 그래서 Sebastian의 대답은 나에게 적용되지 않았습니다. 내 프로젝트가 호출됩니다 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-inforootnot macuser. 그것이 나에게 permission denied오류를 준 이유 입니다. 나는 또한 /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link그것이 만든대로 제거 해야했습니다 root. 나는 pip install -e .그것들을 제거한 후 다시 한 번 작동했습니다.


3

루트를 사용하여 가상 환경을 만든 경우 다음 명령을 사용하십시오.

sudo su

루트 액세스 권한을 부여한 다음이를 사용하여 가상 환경을 활성화합니다.

source /root/.env/ENV_NAME/bin/activate

1

당신은 가상 환경 활성화되지 않았다 주사위를 사용하기 전에합니다.

다음과 같이 시도하십시오.

$(your venv path) . bin/activate

그런 다음 기본 폴더에서 pip -r requirements.txt를 사용하십시오.


1

나는 또한 기존 가상 환경에서 새로운 Venv를 만든 후에 (우연히) 이런 일이 발생했습니다. 이것을 진단하는 쉬운 방법 python은 심볼릭 링크 된 위치를 확인하는 것 입니다.

ls -l venv/bin/python

적절한 Python 바이너리를 가리키는 지 확인하십시오. 대부분의 시스템에서 이것은 /usr/bin/python또는 /usr/bin/python3입니다. 기존 가상 환경을 가리키는 경우 /home/youruser/somedir/bin/python. 후자 인 경우 기존 virtualenv (예 : run deactivate)가 "내부"가 아닌지 확인하면서 venv를 다시 만드는 것이 좋습니다.


적절한 키워드를 언급하는 인기있는 질문이기 때문에 여기에 게시되었습니다. 따라서 다른 사람들에게 유용 할 가능성이 더 높습니다
Sam Mason

0

sudo를 사용하면 virtualenv를 생성하는 동안 디렉토리가 루트 권한으로 생성되므로 sudo가 아닌 사용자로 패키지를 설치하려고하면 설치할 권한이 없습니다. 따라서 항상 sudo없이 virtualenv를 만들고 sudo없이 설치하십시오.

전역 파이썬에 설치된 패키지를 virtualenv로 복사 할 수도 있습니다.

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/

이것은 문제가 아닙니다. 주석을 읽으면 OP가 처음에 sudo를 사용하여 가상 환경을 생성했습니다.
NickD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.