sudo와 함께 파이썬 virtualenv를 사용하는 방법?


47

/ home 아래에없는 디렉토리에서 파이썬 환경을 시스템 환경 (virtuenv 사용)과 분리하려고합니다. 여러 사용자가 액세스 할 수있는 다른 소프트웨어를 빌드하는 데 사용해야하기 때문입니다. virtualenv를 생성하고 활성화 할 수는 있지만 sudo명령 (예 : 다른 소프트웨어를 만들거나 컴파일하는 경우)이 사용되는 시스템 파이썬입니다 (사용 가능한 모듈 때문에 알 수 있음).

우분투에서는 루트 사용자 를 사용하는 것이 좋지 않기 때문에 sudovirtualenv를 사용하도록 지시 하는 방법이 있습니까? 아니면 이것이 올바른 접근 방법이 아니며 완전히 새로운 파이썬 설치를해야합니까?

64 비트 버전의 Ubuntu 12.04 (및 python 2.7)를 사용하고 있습니다.


1
다음은 작동합니까? sudo $ (어떤 파이썬) <script>
John Drinane

답변:


57

문제는 거의 확실하게 sudovirtualenv 환경 변수, 별칭, 함수 등이 전달되지 않는다는 것입니다.

해결책은로 가상 환경의 Python 실행 파일을 명시 적으로 실행하는 것입니다 sudo. 예를 들어 virtualenv가 ./AwesomeProject 인 경우 sudo ./AwesomeProject/bin/python <script>root 권한으로 virtualenv와 함께 스크립트를 사용하도록 실행할 수 있습니다.


3
스크립트의 첫 줄이 virtualenv의 Python 바이너리를 가리 키도록 할 수도 있습니다. #!<virtualenv_dir>/bin/python.
OrangeTux

어, 이것이 지금까지만 해결책이라는 것을 귀찮게합니다. Mac에서 sudo python은 가상 환경의 python을 사용합니다.
gaefan

4

이 문제와 같은 문제를 발견 할 수있는 다른 사람들을 위해 우연히 만난 Ken은 env 변수가 전달되지 않는 것이 맞습니다. 내가 사용한 해결책은 스크립트에 다음 줄을 추가하는 것이 었습니다. 이는 항상 스크립트에서 직접 가상 환경을로드하는 이점이 있습니다. (crontab과 함께 스크립트를 사용하거나 다른 해결 방법없이 시작할 수 있음을 의미합니다.)

base_dir = os.path.dirname(os.path.abspath(__file__))
activate_this = os.path.join(base_dir, 'venv/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))

여기에 더 많은 배경 : https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python


4

스크립트가 다른 프로그램을 실행하기 때문에 $ PATH를 업데이트해야하는 경우가 있습니다. 예를 들어 pypi-install에는 PATH에 py2dsc-deb가 필요합니다. 이 명령은 작동합니다 :sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"

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