Activar virtualenv via os.system ()

Estoy escribiendo un script de shell basado en Python para preparar una aplicación Django con virtualenv, pip y fabric. Debería ser lo suficientemente sencillo, pero parece que no puedo activar y ejecutar comandos en el virtualenv a través del script de shell.

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

Al ejecutarse, este error sale:

 $ 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 

Obviamente, la línea de source no se está ejecutando, pero ¿por qué? ¿Es un problema de concurrencia / subprocesos, o algo más profundo con virtualenv?

¡Gracias!

Cada llamada os.system crea un nuevo proceso. Deberá asegurarse de que la activate y la instalación easy_install se ejecutan en la misma llamada os.system o subprocess .

Cada llamada a os.system ejecuta el comando en una nueva subshell, que tiene las mismas propiedades que el proceso de Python original.

Trate de poner los comandos en una cadena separada por punto y coma.

Simplemente no use “Source Activar” en absoluto. No hace nada más que alterar su shell PATH para colocar primero el directorio bin de virtualenv. Supongo que su script sabe el directorio del virtualenv que acaba de crear; todo lo que tiene que hacer es llamar a _virtualenv_dir_ / bin / easy_install por la ruta completa. O _virtualenv_dir_ / bin / python para ejecutar cualquier otro script de Python dentro de virtualenv.

También puede instalar virtualenvwrapper y usar el enlace postmkvirtualenv. Lo utilizo para traer automáticamente copias nuevas de pip e IPython a los virtuales que creo (ya que no lo quiero con mi sistema IPython). También lo uso para copiar pythonw en el virtualenv, de lo contrario, las cosas basadas en wx no funcionarán. Se ve como esto:

 easy_install pip pip install -I ipython cd ~/bin python install_pythonw.py ${VIRTUAL_ENV}