Подтвердить что ты не робот

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
4b9b3361

Ответ 1

Я попал в рабочий скрипт \foobar.exe, но он больше меняет код, чем я хочу. Я надеялся пройти всего пару попыток setup.py или, по крайней мере, что-то, что не путается внутри модулей вверх. Я не знаю, это достаточно хорошо, чтобы быть уверенным, что я как-то не мешаю.

(1) move bin/foobarfoobartools/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'],