pip 설치 실패 : OSError : [Errno 13] 디렉터리에 대한 권한이 거부되었습니다.


123

pip install -r requirements.txt아래 예외로 실패합니다 OSError: [Errno 13] Permission denied: '/usr/local/lib/.... 무엇이 잘못되었으며 어떻게 수정합니까? ( 장고 를 설정하려고합니다 )

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'

관련 (맥 OS / 자작 특정) stackoverflow.com/questions/33004708/...이

답변:


76

옵션 a) virtualenv를 만들고 활성화 한 다음 설치합니다.

virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt

옵션 b) homedir에 설치 :

pip install --user -r requirements.txt

이 프로젝트의 요구 사항이 다른 프로젝트 요구 사항을 방해하지 않도록 안전 (a) 옵션을 사용하는 것이 좋습니다.


2
sudo:pip: command not found이 명령을 실행할 때 aws ec2 인스턴스에서 이와 같은 오류가 발생했습니다 . 도와주세요.
user3768495

2
@ user3768495 아마도 pip는 기본적으로 설치되지 않습니다. EC2는 어떤 배포판입니까? 또한 python2가 설치되지 않았을 수 있으므로 python2를 설치하거나 pip3을 사용합니다. 그래도 조심하십시오.
hectorcanto

33
나는 이것이 지금 여러 곳에서 권장되지 않는다는 것을 읽었습니다. PIP를 실행할 때 우리는 sudo를 사용에주의해야한다 (같은 버트의 답변을 참조) 같은데
유스 Eapen

3
@JustusEapen : 나는 그것에 대해 어떻게 생각하는지 모르겠습니다. 나는 OP의 질문에 대한 적절한 대답이 "슈퍼 유저 권한으로 그늘진 코드를 실행하지 말라"와 "정기적으로 양치질"을 포함한 기본적인 컴퓨터 위생에 대한 매뉴얼이라고 생각하지 않는다. 최적의 대답은 패키지가 사용자 단위 또는 시스템 단위로 설치 될 수 있으며 OP가 원하는대로 시스템 단위로 설치하려면 슈퍼 사용자 권한이 필요하다는 점을 지적해야합니다. 시스템 경로에 패키지를 설치하는 것에 대한주의는 아마도 다른 SO 질문에 대한 다른 작업 일 것입니다.
Tobia Tesan

8
sudo조언 때문에 반대 투표 . 지금은 효과가 있지만 앞으로는 많은 골칫거리가 될 것입니다.
Gerald

318

sudowith 사용에 대한 조언을 중단해야합니다 pip install. 먼저 시도하는 것이 좋습니다 pip install --user. 이것이 실패하면 여기 에서 상단 게시물을 살펴보십시오 .

사용하지 말아야하는 이유 sudo는 다음과 같습니다.

pip를 사용하여 pip를 실행 sudo하면 루트 사용자로 인터넷에서 임의의 Python 코드를 실행하게되는데, 이는 상당히 큰 보안 위험입니다. 누군가가 PyPI에 악성 프로젝트를 올려 설치하면 공격자에게 컴퓨터에 대한 루트 액세스 권한을 부여합니다.


5
좋은 관찰입니다. 결국 그것은 모두 sudo x install를 위해, 모두 를 위해 x(포함 x = make) 간다 .
Tobia Tesan

1
이것은 또한 내 문제를 해결했습니다. --user 추가는 무엇을합니까?
Miles Johnson

1
@MilesJohnson 추가 --user는 루트가 아닌 홈 디렉토리에 패키지를 설치합니다. 이 위치에 무언가를 설치하는 데 추가 권한이 필요하지 않습니다.
bert jul

1
또한 프록시 뒤의 원격 서버에있는 경우 "sudo"는 원격 서버 네트워크의 인터넷 저장소 및 / 또는 git 저장소에서 패키지를 가져 오는 것을 방지합니다.
운동 실조증

2
에 대한 모든 언급은 sudo1 년 전에 제거되었습니다. 이 답변은 더 이상 사용되지 않습니다. 수정하고 업데이트하십시오. 또한 사용자 별 설치와 시스템 전체 설치 및 권한을 언급해야합니다. 귀하의 답변을 사용하여 다른 답변을 직접 비판하지 마십시오.
smci

28

권한없이 시스템 전체 경로에 패키지를 설치하려고합니다.

  1. 일반적으로 시스템 전체 경로에 패키지를 설치하기 위해 sudo임시로 수퍼 유저 권한 얻을 수 있습니다 .

     sudo pip install -r requirements.txt

    sudo 여기 에 대해 자세히 알아 보십시오 .

    실제로 이것은 나쁜 생각이며 좋은 사용 사례가 없습니다. @wim의 의견을 참조하십시오.

  2. 시스템 전체를 변경하지 않으려면 플래그를 사용하여 사용자 별 경로 에 패키지를 설치할 수 있습니다 --user.

    필요한 것은 다음과 같습니다.

     pip install --user runloop requirements.txt
  3. 마지막으로 더 세밀한 제어를 위해 virtualenv 를 사용할 수도 있습니다. 이는 특히 여러 프로젝트에서 작업하고 각 프로젝트 의 종속성을 추적하려는 경우 개발 환경을위한 우수한 솔루션이 될 수 있습니다 .

    가상 환경을 활성화 한 후

    $ my-virtualenv/bin/activate

    다음 명령은 (그리고 VIRTUALENV 내부 패키지를 설치할 수 없습니다 시스템 전체 경로) :

    pip install -r requirements.txt


4
루트로 주사위를 실행하면 함께 제공 보안 위험
Nrzonline

인터넷에서 코드를 실행하는 모든 것을 루트로 실행 하면 보안 위험이 따릅니다.
Tobia Tesan 2018 년

이것은 거의 최선의 답변이지만 여전히 업데이트가 필요합니다. a) 이제 우리는 (또는 ) b) 유해하다고 간주되는 sudo pyenv/pipenv보다 우선적으로 언급해야 하며 다른 답변을 확인해야합니다. 따라서 큰 면책 조항과 함께 env 기반 답변을 먼저 넣고 sudo를 마지막에 넣으십시오. virtualenvconda-env
smci

1
sudo pip install -r requirements.txt절대 옳지 않습니다. 시스템의 파이썬 환경은 period 시스템에 속합니다 . 당신이 시스템에 더 많은 파이썬 물건을 설치 할 경우에만 (예 : 패키지 관리자와 함께 할 sudo yum install, apt-get이들의 repos는 소용이 라이브러리의 안전 및 호환 버전이 있어야하기 때문에, 등 ...).
wim

1
@TobiaTesan sudo make install일반적으로 컴파일 + 링크 된 오래된 코드는 Python env 시스템에 설치하면 종속성이 무효화 될 수sudo pip install 있으므로 a와 실제로 유사하지 않습니다 . 종속성 이있는 시스템 서비스 가 있고 (이는 패키지 관리자에도 있고 호환 가능한 버전에 고정됨) " " 에 대한 종속성이있는 다른 앱 또는 라이브러리가 있다고 가정합니다 . Pip은 최신 버전으로의 시스템 버전을 기꺼이 "업그레이드" 할 것입니다.이 경우 호환되지 않거나 제거되지 않고 시스템이 중단 될 수 있습니다. python-frobnicatorfroblibsudo pip installfroblib > 1.2froblib
wim

26

권한 거부 오류에 대한 Linux (ubuntu 기반)에서 많은 고통을 겪은 후 내게 효과가 있었던 것이 무엇인지 명확히하고 위의 Bert의 답변을 활용하여 이제 ...

$ pip install --user <package-name>

또는 요구 사항 파일에서 pip를 실행하는 경우 ...

$ pip install --user -r requirements.txt

가상 환경 생성을 포함하여 모든 pip 설치에서 안정적으로 작동합니다.

그러나, 깨끗한 솔루션 내 더 경험이 설치되었습니다 python-virtualenvvirtualenvwrapper함께 sudo apt-get install시스템 레벨에서.

그런 다음 가상 환경 내 pip install에서 --user플래그 없이 AND 없이 sudo. 전반적으로 훨씬 더 깨끗하고 안전하며 쉽습니다.


" '--user'설치를 수행 할 수 없습니다. 사용자 사이트 패키지가이 가상 환경에 표시되지 않습니다."라는 메시지가 표시됩니다. 사용하려고 할 때 오류pip install --user -r requirements.txt
아미르 A. 샤 바니

@ AmirA.Shabani 귀하의 질문 이후 답변이 수정되었습니다. 이제 "가상 환경 내부, --user 플래그 및 sudo없이 pip 설치 사용"이라고 표시됩니다.
Daishi

7

사용자에게 일부 Python 설치 경로에 대한 쓰기 권한이 없습니다. 다음과 같은 방법으로 권한을 부여 할 수 있습니다.

sudo chown -R $USER /absolute/path/to/directory

따라서 권한을 부여한 다음 다시 설치해야합니다. 새 경로가 있으면 권한도 부여해야합니다.

sudo chown -R $USER /usr/local/lib/python2.7/

2
brew와 함께 설치된 python의 경우 brew가 패키지를 로컬 사용자 (루트 없음)로 유지 관리하므로 이것이 정답입니다.
idbrii

9
/ usr / local dir을 채우는 것은 좋은 생각이 아닙니다. 사용자 소유가 아닙니다. 유닉스 파일 구조에 대해 읽어야합니다.
user8162

6
/usr요즘에는 일반적으로 루트가 소유하는 물건 입니다. 재귀 적으로 음식을 먹으면 시스템이 크게 망가질 수 있습니다. 피하십시오 .
wim

0

권한이 필요한 경우 'sudo'와 함께 'pip'를 사용할 수 없습니다. 속임수를 써서 'sudo'를 사용하고 패키지를 설치할 수 있습니다. pip 명령 앞에 'sudo python -m ...'을 넣으십시오.

sudo python -m pip install --user -r package_name

나에게는 괜찮아 보이지만 설명을 추가해 주시겠습니까?
pythonic833

-1

그래서 완전히 다른 이유로 동일한 오류가 발생했습니다. 완전히 별개이지만 알려진 Homebrew + pip 버그 로 인해 Google Cloud의 도움말 문서에 나열된 이 해결 방법 을 따랐습니다 . 여기서 홈 디렉토리에 .pydistutils.cfg 파일을 생성했습니다. 이 파일에는 특정 라이브러리 설치에만 사용해야하는 특수 구성이 있습니다. 패키지를 설치 한 후 disutils.cfg 파일을 제거해야했지만 제거하는 것을 잊었습니다. 그래서 저를위한 해결책은 사실 단지 ...

rm ~/.pydistutils.cfg.

그리고 모든 것이 정상적으로 작동했습니다. 물론 실제 이유로 해당 파일에 일부 구성이있는 경우 해당 파일을 곧바로 RM을 사용하고 싶지는 않을 것입니다. 그러나 다른 사람이 해당 해결 방법을 수행하고 해당 파일을 제거하는 것을 잊은 경우에 대비해이 방법이 나에게 도움이되었습니다!


-1

정당한 허가 문제입니다.

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이 임의의 파이썬 경로에 설치하는 것이다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.