2011-10-05 12 views
11

breve domanda
Utilizzando virtualenv/virtualenvwrapper è possibile aggiungere un prefisso al python chiamata che collegato a un ambiente virtuale specifico?Esecuzione non di sistema Python con virtualenv in modalità a 32 bit su OS X

Sfondo
Vorrei avere ambiente virtuale multipla usando una brew installed Python 2.7, ma alcuni in esecuzione in modalità a 64 bit e la modalità a 32 bit altri.

Di seguito è disponibile l'impostazione tipica per lo sviluppo di OS X. Il prefisso specifico che vorrei aggiungere alla chiamata python è arch -i386 per forzare Python a funzionare come modalità a 32 bit. Anche in questo caso, la parte più importante è che sarà aggiunto solo dopo aver chiamato workon env32 (come mostrato nell'esempio). So che posso impostare un alias nel mio profilo .bash, ma questo dovrebbe essere modificato ogni volta che creo/rimuovo ambienti virtuali.

EDIT
Per elaborare più sui problemi che ho con l'utilizzo di un semplice alias, ci potrebbero essere più di 1 32bit ambiente virtuale. Detto questo, la chiamata a workon idealmente aggiungerebbe il prefisso alla chiamata python in modo che il flusso di lavoro sul terminale fosse lo stesso. Significato dopo aver chiamato workon env_x_32 Sarei in grado di utilizzare solo python e il arch -i386 sarebbe trasparente per me quando si utilizza Terminal.

Python Installazione:

> brew install python --framework --universal 

creazione di ambienti virtuali (dopo l'installazione di pip, virtualenv e 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 utilizzo bit:

> workon env_1_64 
> python myscript.py 

> workon env_2_64 
> python my_other_project_script.py 
utilizzo po

32: (corrente/non ideale)

> workon env_1_32 
> arch -i386 python myscript.py 

> workon env_2_32 
> arch -i386 python my_other_project_script.py 

32 utilizzo bit: (Ideal)

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

Soluzione
Running with Sean I commenti sono:

Ho aggiunto un alias all'interno dell'attivazione/disattivazione per gli ambienti che volevo eseguire come 32 bit. Vedi sotto per maggiori dettagli.

env_1_32: attivare lo script

# 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

Ieri questa domanda (e la risposta) è stata molto utile per me, grazie! Tuttavia, oggi sono bloccato di nuovo, perché i miei progetti non hanno uno script 'main.py' di livello superiore, invece uno è generato da setuptools (?) Quando eseguo un 'setup.py install' o 'setup.py sviluppare ', usando la configurazione' entry_points 'nel mio setup.py. Ciò significa che non c'è posto per me per inserire il mio alias "arch" quando viene distribuito sulla macchina di un utente. Potrei fare una domanda a parte su questo. –

risposta

6

Aggiunta di un alias allo script attivare, e l'attivazione virtualenv ogni tipo che si desidera utilizzare.

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

Suggerisco sempre di utilizzare l'opzione virtualenv --no-site-packages quando crei i tuoi virtualenvs. –

+0

In generale, lo faccio. Questa istanza esatta sto usando wxPython (installato nella versione prodotta) quindi ho davvero bisogno dei suoi pacchetti del sito. –

+0

Controlla la mia modifica in risposta alla tua domanda. –

Problemi correlati