Что setup.py?


может кто-нибудь объяснить, что такое setup.py и как его можно настроить или использовать?

10 614

10 ответов:

setup.py это файл python, который обычно говорит вам, что модуль/пакет, который вы собираетесь установить, был упакован и распространен с помощью Distutils, что является стандартом для распространения модулей Python.

Это позволяет легко устанавливать пакеты Python. Часто достаточно написать:

$ python setup.py install

и модуль установит себя.

http://docs.python.org/install/index.html

это помогает установить пакет python foo на вашем компьютере (также может быть в virtualenv), так что вы можете импортировать пакет foo из других проектов, а также из подсказок [I]Python.

он делает аналогичную работу pip,easy_install etc.,


используя setup.py

давайте начнем с некоторых определений:

пакета - КАТАЛОГ/КАТАЛОГ что содержит .
модуль - допустимый файл python с

setup.py Это ответ Python на многоплатформенный установщик и .

если вы знакомы с установками командной строки, то make && make install переводится как python setup.py build && python setup.py install.

некоторые пакеты являются чистыми Python, и только байт скомпилированы. Другие могут содержать собственный код, который потребует собственного компилятора (например,gcc или cl) и модуль сопряжения Python (например,swig или pyrex).

Если вы загрузили пакет, который имеет "setup.py" в корневой папке вы можете установить его, запустив

python setup.py install

Если вы разрабатываете проект и Вам интересно, для чего этот файл полезен, проверьте документация Python по написанию сценария установки

setup.py Это скрипт Python, который обычно поставляется с библиотеками или программами, написанными на этом языке. Их целью является правильная установка программного обеспечения.

многие пакеты используют distutils фреймворк в сочетании с setup.py.

http://docs.python.org/distutils/

setup.py может использоваться в двух сценариях, во-первых, вы хотите установить пакет Python. Во-вторых, вы хотите создать свой собственный пакет python. Обычно стандартный пакет Python имеет несколько важных файлов, таких как setup.py-настройка.cfg и Manifest.in. когда вы создаете пакет Python, эти три файла будут определять (содержимое в pkg-INFO в папке egg-info) имя, версию, описание, другие необходимые установки (обычно in .txt файл) и несколько других параметров. установка.cfg читается by setup.py в то время как пакет создается (может быть tar.ГЗ ). Manifest.in где вы можете определить, что должно быть включено в ваш пакет. В любом случае вы можете сделать кучу вещей, используя setup.py как

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

есть куча других команд, которые могут быть использованы с setup.py . за помощью

python setup.py --help-commands

когда вы загружаете пакет с setup.py откройте терминал (Mac, Linux) или командную строку (Windows). Используя cd и помогает вам с помощью кнопки Tab установить путь прямо к папке, где вы загрузили файл и где есть setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

нажмите enter, вы должны увидеть что-то вроде этого:

iMac:pakagefolderwithsetupfile user$

затем введите после этого python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

пресс enter. Готово!

чтобы установить загруженный пакет Python, вы извлекаете архив и запускаете setup.py скрипт внутри:

python setup.py install

для меня это всегда казалось странным. Было бы более естественно указать менеджер пакетов при загрузке, как это было бы в Ruby и Nodejs, например. gem install rails-4.1.1.gem

менеджер пакетов также более удобен, потому что он знаком и надежен. С другой стороны, каждый setup.py является новым, потому что это специфично для пакета. Она требует веры в себя конвенция "я доверяю этому setup.py принимает те же команды, что и другие, которые я использовал в прошлом". Это прискорбный налог на умственную силу воли.

Я не говорю, что setup.py рабочий процесс менее безопасен, чем менеджер пакетов (я понимаю, что Pip просто запускает setup.py внутри), но, конечно, я чувствую, что это неловко и раздражает. Существует гармония команд, все из которых относятся к одному и тому же приложению диспетчера пакетов. Вы даже можете полюбить его.

чтобы сделать его простым, setup.py выполняется как "__main__" когда вы называете установить функции другие ответы упомянули. Внутри setup.py, вы должны поставить все необходимое для установки вашего пакета.

общие setup.py функции

в следующих двух разделах обсуждаются две вещи много setup.py модули есть.

setuptools.настройка

эта функция позволяет указать атрибуты как имя проект, версия.... Самое главное, что эта функция позволяет устанавливать другие функции, если они упакованы правильно. Смотрите этот сайт для примера setuptools.установка

Эти атрибуты setuptools.установка включите установку следующих типов пакетов:

  • пакеты, импортированные в ваш проект и перечисленные в PyPI используя setuptools.findpackages:

    packages=find_packages (exclude=["docs", "tests",".gitignore", " README.первый", " описание.первый"])

  • пакеты не в PyPI, но может быть загружен с URL-адреса с помощью dependency_links

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

пользовательские функции

в идеальном мире, setuptools.setup будет обрабатывать все для вас. К сожалению, это не всегда так. Иногда вам нужно делать определенные вещи, такие как установка зависимостей с помощью подпроцесс команда, чтобы получить систему, которую вы устанавливаете в правильном состоянии для вашего пакета. Старайтесь избегать этого, эти функции становятся запутанными и часто отличаются между OS и даже распределение.

setup.py есть файл Python, как и любой другой. Он может принимать любое имя, за исключением того, что по соглашению он называется setup.py Так что нет другой процедуры с каждым скриптом.

чаще всего setup.py используется для установки модуля Python, но сервер других целей:

модули:

возможно, это самое известное использование setup.py в модули. Хотя они могут быть установлены с помощью pip, старые версии Python не включали pip по умолчанию и они должны быть установлены отдельно.

если вы хотите установить модуль, но не хотите устанавливать pip, почти единственной альтернативой было установить модуль из . Это может быть достигнуто с помощью python setup.py install. Это установит модуль Python в корневой словарь (без pip,easy_install ect).

этот метод часто используется, когда pip не удастся. Например, если правильная версия Python желаемая пакет не доступен через pipвозможно, потому, что он больше не поддерживается , загрузка источника и запуск python setup.py install будет выполнять то же самое, за исключением случаев, когда требуются скомпилированные двоичные файлы (но будет игнорировать версию Python-если не будет возвращена ошибка).

другое использование setup.py установить пакет из исходников. Если модуль все еще находится в стадии разработки, файлы wheel будут недоступны, и единственный способ установить-установить из источника непосредственно.

создание расширений Python:

когда модуль был построен, он может быть преобразован в модуль готов для распространения с помощью distutils setup script. После сборки они могут быть установлены с помощью команды выше.

сценарий установки легко построить и после того, как файл был правильно настроен и может быть скомпилирован с помощью запуска python setup.py build (см. ссылку для всех команд).

еще раз он назван setup.py для простоты использования и по соглашению, но может принимать любое имя.

Cython:

еще одно известное использование setup.py файлы скомпилированных расширений. Для этого требуется сценарий установки с пользовательскими значениями. Они позволяют быстро (но после компиляции зависят от платформы) выполнение. Вот простой пример из документация:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

это может быть скомпилировано с помощью python setup.py build

Cx_Freeze:

еще один модуль, требующий установки скрипта cx_Freeze. Это преобразует скрипт Python в исполняемые файлы. Это позволяет многим командам, таким как описания, имена, значки, пакеты для включения, исключения ect и после запуска будет создавать распространяемое приложение. Пример из документация:

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

это может быть составлен через python setup.py build.

что это setup.py файл?

просто это скрипт, который создает или настраивает что-то в среде Python.

пакет при распространении должен содержать только один сценарий установки, но это не редкость, чтобы объединить несколько вместе в один сценарий установки. Обратите внимание, что это часто включает distutils но не всегда (как я показал в моем последнем примере). То, что нужно помнить, это просто настраивает пакет/скрипт Python каким-то образом.

он принимает имя так одна и та же команда всегда может быть использована при сборке или установке.