Распространение скриптов 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 при двух обстоятельствах:

  1. Вы явно сказали, что делаете это в командной строке: $ python nameofyourscript
  2. Вы просили об этом сказать, включив в верхнюю часть скрипта шебанг, указывающий на Python. Предпочтительная версия этого #!/usr/bin/env python,

Включив шебанг в каждый из ваших сценариев, вы можете назвать файл как угодно.

Без выполнения этих действий сценарий будет выполняться как обычный сценарий, предназначенный для любой используемой оболочки.

Другие вопросы по тегам