2011-08-30 16 views
29

en mi equipopython 2 en lugar de python 3 como el pitón predeterminado (temporal)?

~$ python -V 
Python 3.2.1 

pero me meto en problemas cuando corro algunos programas Python. yo creo que es (o al menos quiero probar esto) que hay algunos problemas de compatibilidad hacia atrás, y yo quiero ejecutar esos scripts python con

python2 2.7.2-2 

que también está instalado en mi sistema, pero no sé cómo para hacerlo como el pitón predeterminado (temporal). La secuencia de comandos python comienza con

#!/usr/bin/env python 

y estoy usando arch Linux.

+2

¿Por qué no basta con cambiar el tinglado? –

+2

Tenga en cuenta que Arch Linux es uno de los pocos distribuidores de Python que ha hecho que 'python' sea' python3'. Este ha sido un movimiento controvertido en el mundo de Python. Vea las discusiones sobre el borrador de PEP 394 (http://www.python.org/dev/peps/pep-0394/). –

Respuesta

50

Puede utilizar virtualenv

# Use this to create your temporary python "install" 
# (Assuming that is the correct path to the python interpreter you want to use.) 
virtualenv -p /usr/bin/python2.7 --distribute temp-python 

# Type this command when you want to use your temporary python. 
# While you are using your temporary python you will also have access to a temporary pip, 
# which will keep all packages installed with it separate from your main python install. 
# A shorter version of this command would be ". temp-python/bin/activate" 
source temp-python/bin/activate 

# When you no longer wish to use you temporary python type 
deactivate 

Enjoy!

+4

Gracias, buena, idea simple. A veces hay cientos de scripts de Python ejecutados entre ellos y otras cosas en un gran sistema de compilación, y todos tienen env python, por lo que cambiar cada archivo no es una opción. –

+1

Ídem. Muchos paquetes de código abierto suponen que python se refiere a python2. Esta es una manera simple de obtener un bash o zsh para mapear python2 a python mientras el paquete se construye. La versión actual de virtualenv cambia el mensaje, por lo que hay un buen recordatorio visual para ejecutar la desactivación cuando haya terminado. – WeakPointer

9

Simplemente llame al script usando algo como python2.7 o python2 en lugar de solo python.

Así:

python2 myscript.py 

en lugar de:

python myscript.py 

Lo que alternativamente podría hacer es reemplazar el enlace simbólico "pitón" en/usr/bin, que actualmente une a python3 con un enlace al ejecutable python2/2.x requerido. Entonces podría simplemente llamarlo como lo haría con python 3.

2

Utilice el comando python para iniciar scripts, no shell directamente. P.ej.

python2 /usr/bin/command 

AFAIK este es el método recomendado para scripts de solución con mala línea de intérprete.

8

Usted no quiere un "Python por defecto temporal"

desea que el 2,7 guiones para iniciar con

/usr/bin/env python2.7 

y desea que el 3,2 guiones para empezar

/usr/bin/env python3.2 

Realmente no hay uso para un Python "predeterminado". Y la idea de un "incumplimiento temporal" es solo un camino a la confusión absoluta.

Recuerde.

Explicit es mejor que Implícito.

+0

De la instalación predeterminada, ¿no sería 'python27' y' python32'? – Edwin

+1

@Edwin: No en mi computadora. Es '/ usr/bin/env python2.7'. –

+5

La pregunta no dice que los scripts de Python son creados por el usuario: pueden ser scripts de terceros, y en ese caso no queremos cambiar todos sus shebangs, especialmente si están bajo algún control de versión y nuestros cambios se borrarán cuando actualizamos los guiones En tal caso, realmente necesitamos establecer temporalmente python2 como python. Un buen ejemplo de esto es nacl sdk de google, que causa problemas en archlinux porque espera que python sea python2. – Martinsos

6

Usted podría utilizar alias python="/usr/bin/python2.7":

bash-3.2$ alias 
bash-3.2$ python 
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> ^D 
bash-3.2$ alias python="/usr/bin/python3.3" 
bash-3.2$ python 
Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 16 2013, 23:39:35) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
+0

Los alias no son heredados por shells hijos, por lo que esto solo funcionaría al llamar directamente a python. – gerrard00

7
mkdir ~/bin 
PATH=~/bin:$PATH 
ln -s /usr/bin/python2 ~/bin/python 

Para dejar de utilizar python2, exit o rm ~/bin/python.

+0

simple y llano! no hay necesidad de virtualenv. – lesmana

2

Si usted tiene algunos problemas con virtualenv,

Usted puede usarlo:

sudo ln -sf python2 /usr/bin/python 

y

sudo ln -sf python3 /usr/bin/python 
Cuestiones relacionadas