Распространение скриптов Python без расширения.py
Если я пишу пакет на Python для распространения, и я помещаю некоторые сценарии, которые будут рассматриваться как исполняемые файлы в scripts
из setup.py
, есть ли стандартный способ сделать так, чтобы они не имели расширения *.py? Достаточно ли просто сделать файлы, которые не имеют расширения.py, или что-то еще нужно? Удалит.py из имени файла, который нарушает любую функциональность, связанную с инструментами Python, такими как setup.py
/ distutils и т. д.? Благодарю.
3 ответа
Если вам нужна совместимость с Windows, либо не удаляйте .py
расширение или использовать setuptools ' entry_points
опция, которая автоматически генерирует соответствующие файлы системного скрипта, например, для установки pip.main()
функционировать как скрипт, pip
указывает на setup.py
:
entry_points=dict(console_scripts=['pip=pip:main',
'pip-%s=pip:main' % sys.version[:3]]),
Имеет смысл использовать entry_points
даже если вам не нужна совместимость с Windows, потому что она генерирует для вас правильный шебанг, который указывает на конкретного интерпретатора Python (где универсальный #! /usr/bin/env python
было бы неправильно).
.py
Расширение необходимо только тогда, когда вы хотите импортировать модель AFAICT. Помни что pip
, easy_install
и тому подобное - просто исполняемые файлы с заголовком вверху. Единственная ОС, которая использует расширения файлов для выполнения, - это Windows.
Если сценарий должен выполняться из командной строки, .py
расширение на самом деле ничего не делает для вас. Сценарий будет выполнен с использованием интерпретатора Python при двух обстоятельствах:
- Вы явно сказали, что делаете это в командной строке:
$ python nameofyourscript
- Вы просили об этом сказать, включив в верхнюю часть скрипта шебанг, указывающий на Python. Предпочтительная версия этого
#!/usr/bin/env python
,
Включив шебанг в каждый из ваших сценариев, вы можете назвать файл как угодно.
Без выполнения этих действий сценарий будет выполняться как обычный сценарий, предназначенный для любой используемой оболочки.