sudo에서 pip install을 실행하는 것이 허용되고 안전합니까?


114

직장에서 Windows PC를 사용하는 것과 같은 방식으로 Mac을 사용하여 Python 패키지를 설치하기 시작했습니다. 그러나 내 Mac에서는 로그 파일이나 사이트 패키지에 쓰는 동안 자주 권한 거부 오류가 발생했습니다.

따라서 나는 pip install <package>아래에서 실행하려고 생각 sudo했지만 현재 사용자 계정으로 설치되기를 원한다는 점을 고려할 때 sudo를 안전하고 허용 가능한 사용입니까?

로그 파일 I / O 오류의 추적 예 :

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

업데이트 이것은 권한 때문일 수 있지만 가장 좋은 방법은 파이썬 프로젝트에 가상 환경을 사용하는 것입니다. sudo pip절대적으로 필요한 경우가 아니면 달리는 것은 피해야합니다.


12
' cd /tmp; sudo pip install foo'이 적절한 해결 방법이라는 것을 알았습니다 .
Brian Cain


@pradyunsg 왜 그런 오래된 질문에 플래그를 지정합니까?
markwalker_

3
본질적으로, 현재 받아 들여진 답변 (및 질문의 업데이트)은 "sudo pip"실행을 제안합니다. 즉, pip의 유지 관리자 (자신이 그들 중 하나)가 사람들에게 운영 체제를 손상시킬 수 있으므로하지 말라고 적극적으로 말하는 것입니다. MacOS 및 많은 (모두?) 주요 Linux 배포판에서. 나는 누군가가 자신의 상황을 디버깅 할 수 있다는 용어를 사용하면서 여기에 왔으며 더 나은 조언을 통해 사람들을 위치로 리디렉션하고 싶었습니다. 이 질문을 실제로 가져 오는 것에 대해 생각하지 않았으며 위의 진술과 일치하여 더 나은 대답입니다. (문자 외)
pradyunsg

@markwalker_ 질문에서 해당 조언을 ​​제거하고 더 나은 조언 (--user 또는 virtualenv 사용)으로 대체 하시겠습니까?
pradyunsg

답변:


105

용도 가상 환경을 :

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

sudo전역, 시스템 전체 Python 설치를위한 항목을 설치하려는 경우 에만 사용 하거나 상승 된 권한을 사용합니다.

패키지를 격리하는 가상 환경을 사용하는 것이 가장 좋습니다. 이렇게하면 전역 파이썬 설치를 오염시키지 않고 놀 수 있습니다.

보너스로 virtualenv는 높은 권한이 필요하지 않습니다.


2
그의 홈 디렉토리에 대한 권한이 엉망인 경우 virtualenv를 사용해도 도움이되지 않을 것입니다.
hd1

1
예, 가능하지만 이미 발생 했으므로 계속하기 전에 문제를 해결해야합니다.
hd1 2013-02-22

1
감사합니다. 이전에 virtualenv에 대해 읽었
으므로이

1
또한 virtualenv를 설치하려면 sudo가 필요합니다 ... 아니면 해결 방법이 있습니까?
jimijazz

8
왜 이것이 최선의 대답인지 이해가 안갑니다. 문제는 가상 환경에 관한 것이 아닙니다. 사용의 유효성에 관한 것입니다 sudo pip install. 여러 프로젝트에서 또는 시스템 수준에서 사용할 패키지를 설치해야한다고 가정 해 보겠습니다. 이러한 같은 일부 CLI 도구로 pgcli. 분명히 가상 환경이 필요하지 않으며 전 세계적으로 설치하고 싶습니다. 사용해야할까요 sudo pip install아니면 더 정확한 방법이 있습니까? 그게 질문입니다.
Alex Belyaev

42

pip install아래 에서 실행하는 것이 허용되고 안전 sudo합니까?

안전하지 않고 눈살을 찌푸리고 있습니다. 'sudo pip'실행의 위험무엇입니까? 홈 디렉토리에 Python 패키지를 설치하려면 루트 권한이 필요하지 않습니다. pip 옵션에 대한 설명 을 참조하십시오 --user.


귀하의 솔루션이 실제로 작동 한 첫 번째 솔루션 이었지만 @throws_exceptions_at_you 는 문서로의 리디렉션이 아닌 실제 코드로 응답을 생성했습니다
Edenshaw

나는 sudo pip install그것을 사용하여 손해를 몰랐다. 이 명령을 실행 취소하거나 차단하여 실행하려면 sudo어떻게해야합니까?
Emre Değirmenci

26

원래 문제는 pip가 폴더에 로그를 쓸 수 없다는 것입니다.

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

호출 된 프로세스 /tmp가 다음 cd /tmp과 같이 쓸 수있는 폴더로 cd해야 합니다. 명령을 다시 호출하면 작동하지만 원하는 것은 아닙니다.

그러나 실제로이 특정 경우 ( sudo파이썬 패키지 설치 에 사용하고 싶지 않음 ) 및 글로벌 패키지 설치가 필요하지 않은 경우 다음 --user과 같은 플래그를 사용할 수 있습니다 .

pip install --user <packagename>

잘 작동합니다.

나는 당신이 한 명의 사용자 파이썬 파이썬 설치를 가지고 있다고 가정하고 virtualenv (그다지 사용자 친화적이지 않음) 또는 pipenv에 대해 읽는 것을 귀찮게하고 싶지 않습니다 .

의견 섹션의 일부 사람들이 지적했듯이 다음 접근 방식은 무엇을 해야할지 모르고 막히지 않는 한별로 좋은 생각이 아닙니다.

귀하의 경우와 같은 글로벌 패키지에 대한 또 다른 접근 방식 은 다음과 같습니다.

chown -R $USER /Library/Python/2.7/site-packages/

또는 더 일반적으로

chown -R $USER <path to your global pip packages>

9
-1 전역 사이트 패키지 폴더의 소유권을 변경 하는 것은 끔찍한 일입니다. --userPIP에 대한 옵션은 당신이 당신을 쓸 때 이미 존재했던 내 대답에 솔루션으로 주어졌다.
Piotr Dobrogost

1
나는 여기서 논쟁을 보지 않는다. 또한 이러한 엔트리 레벨 질문을하는 사람은 아마도 유닉스의 권한 시스템에 익숙하지 않을 것이므로 1 사용자 설치를 실행하는 것은 중요하지 않습니다. 또한 귀하의 답변은 실제로 글로벌 패키지에 설치하려는 사용 사례를 실제로 해결하지 못합니다. 그런 다음 권한을 쉽게 사전 설치로 되돌릴 수 있습니다.
throws_exceptions_at_you

2
실제로 전체 명령을 작성하는 경우 +1 . 어떤 사람들은 OP가 자신이나 다른 독자가 그렇지 않을 때 명령 줄에서 옵션 을 구현하는 방법을 알고 있다고 가정합니다 . 동의하지 않습니까, @PiotrDobrogost?
내가 그것에 대해 생각하자

추가 --user하면 도움이됩니다!
Honghao Zhang 2014 년

2
시스템 Python의 전체 site-packages디렉토리에 대한 권한을 변경하는 것은 렌치로 펌프를 두드려 펌프를 "고정"하는 것과 유사합니다. 어떤 이유로 보호됩니다- 거기에 물건을 설치해서는 안됩니다 . 실제 솔루션은 일상적인 프로그래밍 시스템 파이썬 배포를 혼합하지 않는 것입니다. 다른 Python 배포 (Python.org, Homebrew, Canopy 등)를 설치합니다.
charlesreid1 2010

9

같은 문제가 있었기 때문에 실제로 Brian Cain 의 첫 번째 의견 은 "IOError : [Errno 13]"문제에 대한 해결책 이라는 점을 강조하고 싶습니다 .

임시 디렉토리 ( cd /tmp) 에서 실행하면.를 실행 하면 IOError가 더 이상 발생하지 않습니다 sudo pip install foo.


2
이것이 왜 문제를 해결하는지 설명 할 수 있습니까?
Chris

8
여전히이 sudo pip"솔루션"을 사용하고 있으므로 루트 권한으로 패키지를 설치하는 중입니다.
Chris

왜 이것이 작동하는지 짐작할 수 있습니다. (일부) pip 설치 스크립트의 일부는 현재 디렉토리에 대한 쓰기 권한이 필요하지만 다른 사용자가 있어야한다고 생각합니다. 따라서 홈 디렉토리에서 실행하면 쓰기 액세스 권한이 없기 때문에 불가사의하게 실패합니다. /tmp모든 사람이 쓰기 액세스 권한을 갖기 때문에 내부에서 호출 하면 작동합니다.
Edgar

그는 '/Users/markwalker/Library/Logs/pip.log'에 대한 쓰기 권한이 없습니다.
throws_exceptions_at_you

5

을 (를) virtualenvwrapper성공적으로 설치 한 후 설치하는 데 문제가 virtualenv있습니다.

내가 이것을 한 후에 내 터미널이 불평했습니다.

pip install virtualenvwrapper

그래서 실패했습니다 (권장되지 않음) .

sudo pip install virtualenvwrapper

그런 다음 다음 과 함께 성공적으로 설치했습니다.

pip install --user virtualenvwrapper

pip에 대한 --user 옵션은 당신이 당신의 것을 작성할 때 이미 존재했던 내 대답의 해결책으로 주어졌습니다. 이것은 대답이 아닌 주석이어야합니다.
Piotr Dobrogost

권장하지 않는다고 말하지만 공식 설치 노트 는 sudo로 virtualenvwrapper를 설치해도 좋다고 말합니다. virtualenv도 마찬가지입니다. 여기에서 묻는 질문은 그 두 가지를 참조하지 않으므로 여기에있는 다른 모든 답변은 일반 파이썬 패키지에 대한 것이라고 가정합니다.
mehmet

미래의 독자들에게 위의 의견으로 인해 내 답변에서 "권장되지 않음"플래그를 쳤지 만 아직 확인하지 않았습니다. 그래서 아직 플래그를 삭제하지 않았습니다.
그것은 소개하자 나 팅크은

4

권한이 엉망인 것 같습니다. chown -R markwalker ~터미널을 입력 하고 pip다시 시도 하시겠습니까? 정렬되었는지 알려주세요.


이렇게하면 권한 문제가 해결 될 수 있지만 질문에 대한 답은 없습니다.
Burhan Khalid

1
내가 가지고 있는지 몰랐던 문제를 해결하는 것은 보너스입니다! chown주고 Operation not permitted같은 숨겨진 DIRS의 많은에 .shsh& I는 지금 설정할 수 있습니다,하지만 난 때 CLI 프롬프트가 리턴을 어떻게 볼 수 있습니다 파일을 통해 그것의 작업을 가정합니다.
markwalker_ 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.