Python: перенести setup.py "scripts =" в entry_points
Я хотел бы использовать чужую утилиту python, foobartools, родной средой которой является linux. Foobartools - чистый питон, поэтому нет причин, по которым он не может быть использован в Windows, где я есть.
В своем setup.py
они используют старый стиль scripts=['bin/foobar'],
.
Запуск pip install -e b:\code\foobar
создает файл foobar
в %pythonhome%\Scripts
, но Windows не знает об этом, даже если скрипты находятся в PATH. Чтобы использовать его, мне нужно сделать пакетный файл @python %pythonhome%\scripts\foobar
. Это работает, но не является оптимальным (например, обработка ctrl-c уродлива).
Я знаю, что если я добавлю новый и рекомендованный entry_points синтаксис для setup.py, то pip автоматически создаст Scripts\foobar.exe
в Windows (и я могу отбросить пакетный файл). В Linux Scripts\foobar
остается неизменным, и все довольны.
entry_points = {
'console_scripts': ['foobar = foobartools:main'],
}
Я не знаю, что делать с правой частью уравнения, foobartools:main
. Как сделать этот вызов bin/foobar
? Модуль foobartools не имеет ни одной вызываемой функции, либо модуль, подобный этому bin script, а бит script относительно сложный.
Я хочу сделать как можно меньше изменений для проекта, чтобы: а) у патч-представления было больше шансов получить одобрение вверх по течению, и б) если вверх по течению остается незаинтересованным, меньше работы для меня, чтобы идти в ногу с ним.
[обновление] Существующая структура древовидной структуры:
foobartools/
bin/foobar
foobartools/
__init__.py
foo/
__init__.py
one.py
two.py
bar/
...
baz/
...
setup.py
Ответы
Ответ 1
Я попал в рабочий скрипт \foobar.exe, но он больше меняет код, чем я хочу. Я надеялся пройти всего пару попыток setup.py или, по крайней мере, что-то, что не путается внутри модулей вверх. Я не знаю, это достаточно хорошо, чтобы быть уверенным, что я как-то не мешаю.
(1) move bin/foobar
→ foobartools/foobar_cli.py
(2) В setup.py закомментируйте #scripts=...
и добавьте:
entry_points = {
'console_scripts': ['foobar = foobartools.foobar_cli:main'],
}
[позже] Уточнение одной и той же основной идеи означает, что я держу свои толстые ноги вне основной области бизнеса:
(1) переместить ./bin/foobar
→ ./foobar_cli/foobar.py
(расширение заметки, а также изменение папки)
(2) добавьте пустую __init__.py
в ту же папку
(3) console_scripts': ['foobar = foobar_cli.foorbar:main'],