Dependiendo del sistema, python
== python2
o python
== python3
.
Los scripts ejecutables de Python comienzan con:
#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...
Para python py3k se proporciona en la documentación que debería / puedo usar con el número de versión , así que hago esto:
#!/usr/bin/env python3
Pero he encontrado un problema con los scripts py2k.
Mientras que en la documentación py2k está escrito para el uso: #! /usr/bin/env python
,
en algunos * nix-es python py3k es el predeterminado, por lo que python == python3. (Por ejemplo , el paquete Python de ArchLinux , aquí los archivos del paquete Python ).
¿Cómo empaquetar (configurar, crear) y / o preparar scripts de Python para su distribución para manejar eso?
Pregunto acerca de cómo hacer paquetes de software que los usuarios puedan ejecutar fácilmente (sin modificar su entorno)
¿Puedo hacer el mismo truco para los scripts python py2k que para los scripts python py3k y configurarlo como #!/usr/bin/env python2
:? ¿Puedo estar seguro de que cada distribución python py2k contiene un python2
archivo, por #!/usr/bin/env python2
lo que funcionará?
En caso afirmativo, ¿por qué no se propone como estándar, por ejemplo, en la documentación de python py2k ?
fuente
python2
para ejecutarlo (si está instalado), y siempre puedes verificar la versión conpython -V
. si desea quepython
sea 2 o 3, deberm /usr/bin/python
y luego crear un enlace simbólico que apunte desde su versión de Python deseada, por ejemploln -s /usr/bin/python2.5 /usr/bin/python
.python2
. Me pregunto por qué no es estándar usarlo cuando hay py2k y py3k y el valor predeterminadopython
puede diferir. ¿Qué pasa con su consejo sobre la eliminación ? No es apropiado para este ejemplo, porque le pregunto sobre el embalaje. Me gustaría hacer un paquete que pueda ejecutarse en diferentes configuraciones / sistemas. No hay forma de modificar el entorno. ¿Qué pasa con la verificación? No se aplica a Shebang , que yo sepa.#!...python2
en tus programas y si estás usando Python 3.x, úsalo#!...python3
. No confíe en el sistema operativo para tener el enlace correcto si sabe que solo funcionará en una versión específica. Trabajo con sistemas que todavía tienen Python 1.5.2 instalado como/usr/bin/python
: escribo código para manejar versiones anteriores de Python o usopython2
.python2
ejecutable en mi sistema (Debian squeeze).python
es un enlace simbólico apython2.6
, ypython3
es un enlace simbólico apython3.1
, pero no existepython2
.Respuestas:
Un script puede verificar su versión de Python y, si es Python 3, reiniciarse usando Python 2. Agregue lo siguiente cerca del encabezado del script:
Esto utiliza el
which
comando del sistema para ubicarsepython2
en el entornoPATH
. Luego se relanza con eso (o aborta si no puede encontrarlo).Tenga en cuenta que el script debe ser una sintaxis válida de Python 3 para que se inicie en Python 3.
Además, cualquier salida debe ser vaciada antes de la
execv
llamada o se perderá. Agregar, por ejemplo,sys.stdout.flush()
justo antes de la llamada aexecv
vaciará cualquierprint
declaración.fuente
En versiones anteriores, puede haber solo en
python
lugar depython2
. Para que tu línea sheebang sea más clara, puedes crear un enlacepython2 -> python
para que puedas usarlo#!/usr/bin/env python2
.fuente
Creo que el "estándar" se define en https://www.python.org/dev/peps/pep-0394/
fuente