Я упаковываю некоторые пакеты python, используя известную стороннюю систему упаковки, и я сталкиваюсь с проблемой с тем, как создаются точки входа.
Когда я устанавливаю точку входа на моем компьютере, точка входа будет содержать shebang, указываемую на любом интерпретаторе python, например:
в /home/me/development/test/setup.py
from setuptools import setup
setup(
entry_points={
"console_scripts": [
'some-entry-point = test:main',
]
}
)
в /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')()
)
Как вы можете видеть, шаблонная точка входа содержит жестко закодированный путь к интерпретатору python, который в виртуальной среде, которую я использую для создания моего стороннего пакета.
Установка этой точки входа с использованием сторонней упаковочной системы приводит к тому, что точка входа устанавливается на машине. Однако с этой жестко закодированной ссылкой на интерпретатор python, который не существует на целевой машине, пользователь должен запустить python /path/to/some-entry-point
.
Шэбан делает это довольно непропорциональным. (что, конечно же, не является целью дизайна virtualenv, но мне просто нужно сделать это немного более портативным здесь.)
Я бы предпочел не прибегать к сумасшедшим командам find/xargs/sed. (Хотя это мой запасной.)
Есть ли способ изменить путь интерпретатора после shebang, используя флаги или конфиги setuptools
?