/ home 아래에없는 디렉토리에서 파이썬 환경을 시스템 환경 (virtuenv 사용)과 분리하려고합니다. 여러 사용자가 액세스 할 수있는 다른 소프트웨어를 빌드하는 데 사용해야하기 때문입니다. virtualenv를 생성하고 활성화 할 수는 있지만 sudo
명령 (예 : 다른 소프트웨어를 만들거나 컴파일하는 경우)이 사용되는 시스템 파이썬입니다 (사용 가능한 모듈 때문에 알 수 있음).
우분투에서는 루트 사용자 를 사용하는 것이 좋지 않기 때문에 sudo
virtualenv를 사용하도록 지시 하는 방법이 있습니까? 아니면 이것이 올바른 접근 방법이 아니며 완전히 새로운 파이썬 설치를해야합니까?
64 비트 버전의 Ubuntu 12.04 (및 python 2.7)를 사용하고 있습니다.
답변
문제는 거의 확실하게 sudo
virtualenv 환경 변수, 별칭, 함수 등이 전달되지 않는다는 것입니다.
해결책은로 가상 환경의 Python 실행 파일을 명시 적으로 실행하는 것입니다 sudo
. 예를 들어 virtualenv가 ./AwesomeProject 인 경우 sudo ./AwesomeProject/bin/python <script>
root 권한으로 virtualenv와 함께 스크립트를 사용하도록 실행할 수 있습니다.
답변
이 문제와 같은 문제를 발견 할 수있는 다른 사람들을 위해 우연히 만난 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
답변
스크립트가 다른 프로그램을 실행하기 때문에 $ PATH를 업데이트해야하는 경우가 있습니다. 예를 들어 pypi-install에는 PATH에 py2dsc-deb가 필요합니다. 이 명령은 작동합니다 :sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"