Cambio del intérprete del punto de entrada console_script para el empaquetado

Estoy empaquetando algunos paquetes de Python usando un conocido sistema de empaquetado de terceros, y estoy encontrando un problema con la forma en que se crean los puntos de entrada.

Cuando instalo un punto de entrada en mi máquina, el punto de entrada contendrá un shebang apuntado a cualquier intérprete de python, de esta manera:

en /home/me/development/test/setup.py

from setuptools import setup setup( entry_points={ "console_scripts": [ 'some-entry-point = test:main', ] } ) 

en /home/me/.virtualenvs/test/bin/some-entry-point :

 #!/home/me/.virtualenvs/test/bin/python # EASY-INSTALL-ENTRY-SCRIPT: 'test==1.0.0','console_scripts','some-entry-point' __requires__ = 'test==1.0.0' import sys from pkg_resources import load_entry_point sys.exit( load_entry_point('test==1.0.0', 'console_scripts', 'some-entry-point')() ) 

Como puede ver, la placa de referencia del punto de entrada contiene una ruta codificada al intérprete de Python que está en el entorno virtual que estoy usando para crear mi paquete de terceros.

La instalación de este punto de entrada con mi sistema de embalaje de terceros hace que el punto de entrada se instale en la máquina. Sin embargo, con esta referencia codificada a un intérprete de Python que no existe en la máquina de destino, el usuario debe ejecutar python /path/to/some-entry-point .

El shebang hace que esto sea bastante inportable. (lo que no es un objective de diseño de virtualenv con seguridad, pero solo necesito HACERLO un poco más portátil aquí).

Prefiero no recurrir a los comandos encontrar / xargs / sed enloquecidos. (Aunque ese es mi respaldo.)

¿Hay alguna forma en que pueda cambiar la ruta del intérprete después del shebang usando setuptools flags o Configs?

Puede personalizar la línea shebang de console_scripts configurando ‘sys.executable’ (esto se aprendió de un informe de errores de Debian ). Es decir…

 sys.executable = '/bin/custom_python' setup( entry_points={ 'console_scripts': [ ... etc... ] } ) 

Aunque sería mejor incluir el argumento ‘ejecutar’ al construir …

 setup( entry_points={ 'console_scripts': [ ... etc... ] }, options={ 'build_scripts': { 'executable': '/bin/custom_python', }, } ) 

Simplemente cambie el shebang de su setup.py para que coincida con el python que desea que usen sus puntos de entrada:

 #!/bin/custom_python 

(Intenté la respuesta @damian pero no funcionó para mí, tal vez la versión setuptools en Debian Jessie es demasiado antigua)

Para futuras referencias de alguien que quiera hacer esto en tiempo de ejecución sin modificar el setup.py , es posible pasar la ruta del intérprete a setup.py build través de pip con:

 $ ./venv/bin/pip install --global-option=build \ --global-option='--executable=/bin/custom_python' . ... $ head -1 ./venv/bin/some-entry-point #!/bin/custom_python