2011-10-05 12 views
11

pregunta corta
Usando virtualenv/virtualenvwrapper es posible añadir un prefijo a la llamada que python vinculado a un entorno virtual específico?Ejecución de Python no es del sistema con virtualenv en el modo de 32 bits en Mac OS X

Antecedentes
me gustaría tener múltiples entornos virtuales utilizando un brew installed Python 2.7, pero algunos se ejecuta en modo de 64 bits y el modo de 32 bits otros.

A continuación tengo la configuración típica para mi desarrollo de OS X. El prefijo específico que me gustaría agregar a la llamada python es arch -i386 para forzar que python se ejecute como modo de 32 bits. Una vez más, la parte más importante es que se agregará solo después de llamar al workon env32 (como se muestra en el ejemplo). Sé que puedo configurar un alias en mi .bash_profile, pero esto debería modificarse cada vez que creo/elimino entornos virtuales.

EDITAR
Para elaborar más sobre los problemas que tengo con el uso de un alias de simple, no puede haber más de 1 de 32 bits entorno virtual. Dicho esto, la llamada a workon idealmente agregaría el prefijo a la llamada python para que el flujo de trabajo en la terminal sea el mismo. Significado después de llamar al workon env_x_32 podría usar python y el arch -i386 sería transparente para mí cuando utilice el terminal. Instalación

Python:

> brew install python --framework --universal 

Creación de entornos virtuales (después de instalar pip, virtualenv y virtualenvwrapper):

> mkvirtualenv env_1_64 --no-site-packages 
> mkvirtualenv env_1_32 --no-site-packages 

> mkvirtualenv env_2_64 --no-site-packages 
> mkvirtualenv env_2_32 --no-site-packages 

64 uso de bits:

> workon env_1_64 
> python myscript.py 

> workon env_2_64 
> python my_other_project_script.py 

32 uso de bits: (Actual/no ideal)

> workon env_1_32 
> arch -i386 python myscript.py 

> workon env_2_32 
> arch -i386 python my_other_project_script.py 

32 uso de bits: (Ideal)

> workon env_1_32 
> python my_32bit_project.py # Note that the arch -i386 would be transparent 

Solución
Correr con Sean Comentarios de los usuarios:

Agregué un alias dentro de activar/desactivar para los entornos que quería ejecutar como 32 bits. Vea abajo para más detalles.

env_1_32: activar la escritura

# This file must be used with "source bin/activate" *from bash* 
# you cannot run it directly 

deactivate() { 
    alias python='python' # <---- Added this line 

    # reset old environment variables 
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then 
     PATH="$_OLD_VIRTUAL_PATH" 
     export PATH 
     unset _OLD_VIRTUAL_PATH 
    fi 

    # ****** Removed Content to keep the post shorter********* 

} 

# unset irrelavent variables 
deactivate nondestructive 

VIRTUAL_ENV="/Users/Adam/.envs/env_1_32" 
export VIRTUAL_ENV 

# This should detect bash and zsh, which have a hash command that must 
# be called to get it to forget past commands. Without forgetting 
# past commands the $PATH changes we made may not be respected 
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then 
    hash -r 
fi 

# ****** Removed Content to keep the post shorter********* 

alias python='arch -i386 python' # <---- Added this line to run as 32bit 
+0

Ayer esta pregunta (y respuesta) fue muy útil para mí, ¡gracias! Sin embargo, hoy estoy atascado de nuevo, porque mi proyecto (s) no tiene ningún script de nivel superior 'main.py', en cambio uno es generado por setuptools (?) Cuando hago 'setup.py install' o 'setup.py develop ', utilizando la configuración de' entry_points 'en mi setup.py. Esto significa que no hay lugar para que inserte mi alias 'arch' cuando se despliega en la máquina de un usuario. Puedo hacer una pregunta por separado sobre esto. –

Respuesta

6

Adición de un alias a la secuencia de comandos de activación y la activación de su virtualenv cada tipo que desea utilizarlo.

$ cd env32 
$ echo "alias python='arch -i386 python'" >> bin/activate 
$ source bin/activate 
$ python myscript.py 
+0

Siempre sugiero usar la opción virtualenv --no-site-packages cuando cree sus virtualenvs. –

+0

En general, sí. Esta instancia exacta estoy usando wxPython (instalado en la versión elaborada) así que realmente necesito sus paquetes de sitio. –

+0

Echa un vistazo a mi edición en respuesta a tu pregunta. –

Cuestiones relacionadas