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

직장에서 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절대적으로 필요한 경우가 아니면 달리는 것은 피해야합니다.



답변

용도 가상 환경을 :

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

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

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

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


답변

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

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


답변

원래 문제는 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>


답변

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

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


답변

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

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

pip install virtualenvwrapper

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

sudo pip install virtualenvwrapper

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

pip install --user virtualenvwrapper


답변

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


답변