Dependiendo del sistema, python== python2o 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 python2archivo, por #!/usr/bin/env python2lo que funcionará?
En caso afirmativo, ¿por qué no se propone como estándar, por ejemplo, en la documentación de python py2k ?
fuente

python2para ejecutarlo (si está instalado), y siempre puedes verificar la versión conpython -V. si desea quepythonsea 2 o 3, deberm /usr/bin/pythony 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 predeterminadopythonpuede 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.#!...python2en 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.python2ejecutable en mi sistema (Debian squeeze).pythones un enlace simbólico apython2.6, ypython3es 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
whichcomando del sistema para ubicarsepython2en 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
execvllamada o se perderá. Agregar, por ejemplo,sys.stdout.flush()justo antes de la llamada aexecvvaciará cualquierprintdeclaración.fuente
En versiones anteriores, puede haber solo en
pythonlugar depython2. Para que tu línea sheebang sea más clara, puedes crear un enlacepython2 -> pythonpara 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