문제

virtualenv, pip 및 직물이있는 Django 앱을 보일러 플레이트에 Python 기반 쉘 스크립트를 작성하고 있습니다. 충분히 간단해야하지만 쉘 스크립트를 통해 VirtualEnV에서 명령을 활성화하고 실행할 수없는 것으로 보입니다.

os.system('virtualenv %s --no-site-packages' % project_name)
os.system('source %s/bin/activate' % project_name)
os.system('easy_install pip')

실행 중에는 오류가 발생합니다.

$ startproject+ -s false sample
New python executable in sample/bin/python
Installing setuptools............done.
/testing
Searching for pip
Best match: pip 0.4
Processing pip-0.4-py2.6.egg
pip 0.4 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
error: /usr/local/bin/pip: Permission denied

분명히 source 라인이 실행되지는 않지만 왜? 동시성/스레딩 문제입니까, 아니면 VirtualEnv와 더 깊은가?

감사!

도움이 되었습니까?

해결책

os.system Call은 새로운 프로세스를 만듭니다. 당신은 그것을 확인해야합니다 activate 그리고 easy_install 동일하게 실행됩니다 os.system 또는 subprocess 전화.

다른 팁

각 호출 OS.System은 새로운 서브 쉘에서 명령을 실행하며, 이는 원래 Python 프로세스와 동일한 속성을 갖습니다.

명령을 세미콜론으로 분리 한 하나의 문자열에 넣으십시오.

"소스 활성화"를 전혀 사용하지 마십시오. 그것은 당신의 쉘 경로를 변경하여 virtualenv의 빈 디렉토리를 최우선으로합니다. 나는 당신의 스크립트가 방금 만든 virtualenv의 디렉토리를 알고 있다고 가정합니다. 전체 경로로 _virtualenv_dir_/bin/easy_install을 호출하기 만하면됩니다. 또는 virtualenv 내에서 다른 Python 스크립트를 실행하기위한 _virtualenv_dir_/bin/python.

virtualenvwrapper를 설치하고 postmkvirtualenv 후크를 사용할 수도 있습니다. 나는 그것을 사용하여 PIP와 ipython의 신선한 사본을 제작 한 VirtualEnV에 가져옵니다 (시스템 IPYTHON을 사용하지 않기 때문에). 또한 Pythonw를 VirtualEnV에 복사하는 데 사용합니다. 그렇지 않으면 WX 기반 재료는 작동하지 않습니다. 이렇게 보인다 :

easy_install pip
pip install -I ipython
cd ~/bin
python install_pythonw.py ${VIRTUAL_ENV}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top