Разница между entry_points / console_scripts и скриптами в setup.py?

Существуют два способа установки сценариев консоли Python на мой путь setup.py :

 setup( ... entry_points = { 'console_scripts': [ 'foo = package.module:func', ], } ) 

а также

 setup( ... scripts = [ 'scripts/myscript.sh' ] ) 

Каковы различия? Я вижу, что первый подход позволяет мне выбрать красивое, конкретное имя для моего скрипта, но есть ли другие отличия? Различные оригинальные цели, совместимость (setuptools, distutils, …?), Использование, …? Я совершенно смущен, и хороший подробный ответ может помочь мне (и, возможно, другим), правильно понять все это.

Обновление: поскольку я задал вопрос, PyPA опубликовал эти классные документы по этой теме .

3 Solutions collect form web for “Разница между entry_points / console_scripts и скриптами в setup.py?”

Документы для пакета (awesome) Click предлагают несколько причин использовать точки входа вместо сценариев, в том числе

  1. кросс-платформенная совместимость и
  2. избегая перевода интерпретатора \__name__ в \__main__ , что может привести к \__main__ , что код будет импортирован дважды (если другой модуль импортирует ваш скрипт)

Click – отличный способ реализовать функции для использования в качестве entry_points , кстати.

Одним из ключевых различий между этими двумя способами создания исполняемых файлов командной строки является то, что с помощью подхода setuptools (ваш первый пример) вы должны вызвать функцию внутри скрипта – в вашем случае это функция внутри вашего module . Однако в подходе distutils (ваш второй пример) вы вызываете скрипт напрямую (что позволяет указывать с расширением или без него).

Подход точки входа в инструменты установки (№ 1) также имеет то преимущество, что в Windows будет создан файл .exe, который можно дважды щелкнуть и вызвать, как обычная программа Windows. Это в дополнение к тому, что скрипт помещается в путь bin в posix-подобных системах.

  • setup.py не видит мои требования.txt
  • pip установить PyQt IOError
  • Установка psutil без gcc
  • Как указать зависимости при создании файла setup.py для пакета python
  • Как можно указать или добавить каталог в путь поиска Python.h во время сборки / установки модуля с помощью setup.py?
  • как написать setup.py для этой структуры приложения?
  • Ошибка: неверная команда 'bdist_egg'
  • Ссылаясь на существующие опции distutils внутри setup.cfg и setup.py
  •  
    Interesting Posts for Van-Lav

    Объединить сортировку для подсчета разделенных инверсий в Python

    Преобразование 3D-списка в массив 3D NumPy

    Есть ли соглашение на Python, чтобы избежать длинных строк кода?

    Каков способ сохранить порядок параметров словаря в Python?

    Пользовательский пользователь в django повышает значение ValueError

    Несколько пользовательских ввода в командной строке приложения Python

    Каков наиболее эффективный способ в Python преобразовать строку во все строчные буквы, удаляя все альфа-символы без ascii?

    Отмените опцию `–no-site-packages` с virtualenv

    __getitem__, __setitem__ несколько ключей Python

    TypeError: ufunc 'add' не содержит цикл с типами подписи подписи

    (Только) генерировать SQL-код с SqlAlchemy

    IntegrityError: пул столбцов не является уникальным

    Python на моем Mac – это беспорядок, помогите мне удалить то, что мне не нужно

    Почему я не могу закончить сырую строку с обратной косой чертой?

    Как сообщить PyCharm о местонахождении пользовательских модулей?

    Python - лучший язык программирования в мире.