Вопрос

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

Это было полезно?

Решение

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

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

$ pip install . 

pip будет использовать setup.py для установки вашего модуля.Избегайте звонков setup.py напрямую.

https://docs.python.org/3/installing/index.html#installing-index

Другие советы

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

Он выполняет аналогичную работу по pip, easy_install и т.д.,


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

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

Упаковка - Папка/ каталог, содержащий __init__.py файл.
Модуль - Допустимый файл python с .py расширение.
Распределение - Как один упаковка относится к другим Упаковка и модули.

Допустим, вы хотите установить пакет с именем foo.Тогда вы делаете,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

Вместо этого, если вы на самом деле не хотите его устанавливать, но все же хотели бы им воспользоваться.Тогда делай,

$ python setup.py develop  

Эта команда создаст символические ссылки на исходный каталог в site-packages вместо копирования объектов.Из-за этого это происходит довольно быстро (особенно для больших упаковок).


Создание setup.py

Если у вас есть дерево пакетов, подобное,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

Затем вы выполняете следующие действия в своем setup.py скрипт, чтобы его можно было установить на какой-нибудь компьютер:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

Вместо этого, если ваше дерево пакетов более сложное, как показано ниже:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

Тогда ваш setup.py в этом случае это было бы похоже:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Добавьте еще что-нибудь в (setup.py) и сделайте это достойно:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='foomail@foo.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Тот самый long_description используется в pypi.org как указано в описании README вашего пакета.


И, наконец, теперь вы готовы загрузить свой пакет в PyPi.org чтобы другие могли установить ваш пакет с помощью pip install yourpackage.

Первый шаг - указать имя вашего пакета и пробел в pypi, используя:

$ python setup.py register

Как только имя вашего пакета будет зарегистрировано, никто не сможет претендовать на него или использовать.После успешной регистрации вы должны загрузить свой пакет туда (в облако) с помощью,

$ python setup.py upload

При желании вы также можете подписать свой пакет следующим образом GPG Автор:,

$ python setup.py --sign upload

Бонус:Посмотреть образец setup.py из реального проекта здесь: torchvision-setup.py

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

Если вы знакомы с установкой из командной строки, то 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, setup.cfg и Manifest.in.Когда вы создаете пакет Python, эти три файла будут определять имя (содержимое PKG-INFO в папке egg-info), версию, описание, другие необходимые установки (обычно в файле .txt) и некоторые другие параметры.setup.cfg читается setup.py при создании пакета (может быть tar.gz ).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 — это файл Python, как и любой другой.Он может принимать любое имя, за исключением условного названия. setup.py чтобы для каждого сценария не применялась другая процедура.

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

Модули:

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

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

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

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

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

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

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

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

Китон:

Еще одно известное использование 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 в исполняемые файлы.Это позволяет включать, исключать и включать многие команды, такие как описания, имена, значки, пакеты и т. д., а после запуска создаст распространяемое приложение.Пример из документация:

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.

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

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

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

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

setuptools.setup

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

Эти атрибуты файла setuptools.setup позволяют устанавливать пакеты следующих типов:

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

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • Пакеты не в ПиПИ, но его можно загрузить по URL-адресу, используя dependency_links

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top