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?
0 votos
@bmike, no tengo un tiempo limitado ni un rango de OS. Estoy probando en Monterey/12.1 ahora mismo, pero planeo actualizar pronto. Yo sospechaba que sería un enfoque frágil, y estaría encantado de escuchar su explicación.
1 votos
12.3 es cuando se elimina Python 2, así que si puedes trabajar más allá de eso, ya has pasado el principal período de cambio. Si empaquetas la herramienta, puedes hacer pruebas hasta donde quieras.