2 votos

¿Cuál es el propósito de pythonwrapper, y cómo puedo distinguirlo de un intérprete de Python ejecutable?

Tengo un Bourne script que toma un comando Python (intérprete Python y argumentos) y lo redirige a un intérprete Python personalizado. Quiero asegurarme de que los módulos que estarían en la ruta del intérprete original se pongan en la ruta del intérprete personalizado. Los clientes han indicado que no están dispuestos a abandonar Python 2, así que, si es posible, quiero seguir apoyándolo.

La ruta al intérprete que se pasa al script puede ser una ruta genuina o como un symlink. Quiero determinar la ruta al intérprete asociado lib/site-packages para que pueda ponerlo en la ruta de Python (a través de PYTHONPATH ). He escrito un código que utiliza readlink (sin banderas de opción) para seguir recursivamente los enlaces simbólicos hasta que encuentre un archivo genuino (ejecutable). Funciona bien cuando paso " python3 " al script. Sin embargo, cuando paso " python " (que apunta a Python 2 en mi sistema), la resolución va más allá de /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 a /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/pythonwrapper.app/Contents/MacOS/pythonwrapper . Si trato de ejecutar eso pythonwrapper obtengo este resultado:

$ /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/pythonwrapper.app/Contents/MacOS/pythonwrapper
2022-03-18 11:33:30.863 pythonwrapper[85401:13062358] pythonwrapper is not supposed to be executed directly. Exiting.

Lo ideal sería que si encontrara que el siguiente eslabón de la cadena de enlaces simbólicos fuera un archivo como éste, me detendría en el enlace anterior. Sin embargo, no puedo encontrar ninguna documentación o preguntas del foro sobre este " pythonwrapper ". Cualquiera de los siguientes conocimientos me ayudaría a escribir una lógica especial que me ayude a detenerme en el enlace anterior:

  • algo sobre el propósito de pythonwrapper
  • si sólo está diseñado para Python 2, y no aparecería en una instalación de Python 3
  • si siempre tiene el nombre " pythonwrapper "

Supongo que podría comprobar en cada punto si hay una lib/site-packages directorio uno arriba, sobre todo porque es lo que me interesa en última instancia, pero no estoy seguro de si es la mejor manera de proceder.

0 votos

Empiece explicando qué pretende hacer y no cómo lo va a llevar a cabo. Además, Python 2.7 no ha sido soportado por Python desde hace un par de años, así que asume que está roto y sólo úsalo si entiendes completamente por qué lo estás usando.

0 votos

He añadido un párrafo inicial que aborda estos puntos.

0 votos

Bienvenido a Ask Different, Alan - una cosa extra, si nos indicas la versión específica de MacOS con la que pruebas, a menudo podemos ser más detallados en una respuesta. Tengo una respuesta general sobre por qué esto es frágil y potencialmente un mal plan, pero tal vez usted tiene un tiempo limitado o rango OS que necesita para apoyar?

1voto

Oskar Puntos 1242

Apple tiene una postura interesante sobre todos los lenguajes de scripting y se resume en las instrucciones cuando deprecaron Python.

Si su software depende de los lenguajes de scripting, se recomienda agrupar el tiempo de ejecución dentro de la aplicación.

La mejor respuesta que puedo darte es hacer una aplicación que incluya la versión exacta de la herramienta y no asumir /System no serán parcheados o cambiados incluso en sistemas operativos que no sean de Monterey.

Si llega algún problema de seguridad importante, Apple no dudará en retirar o bloquear la API/SDK obsoleta.

Inicialmente esto es un trabajo extra para usted, pero en última instancia, usted tiene el control total sobre los paquetes y los cambios de la biblioteca y esto puede incluso ahorrar tiempo en el largo plazo en sus esfuerzos de soporte y romper / arreglar mediante el control de su entorno de ejecución más de cerca.

Es probable que elijamos esta versión como la preferida, pero estamos evaluando un par de opciones más en el trabajo:

Creo que los consultores tendrán oportunidades lucrativas para apoyar a las personas que quieren que Python 2 continúe en su entorno y también quieren tener un apoyo fiable y gestionar el riesgo de una interrupción o evento de seguridad.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X