O que é setup.py?

alguém pode explicar, o que é setup.py e como pode ser configurado ou usado?

Author: kmario23, 2009-09-24

10 answers

setup.py é um ficheiro python, que normalmente lhe diz que o módulo/pacote que está prestes a instalar foi embalado e distribuído com Destutils, que é o padrão para a distribuição de Módulos Python.

Isto permite-lhe instalar facilmente pacotes Python. Muitas vezes é o suficiente para escrever:

$ python setup.py install

E o módulo instalar-se-á.

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

 406
Author: Silfverstrom, 2018-01-06 15:32:15

Ajuda a instalar um pacote python foo na sua máquina (também pode estar em virtualenv), para que possa importar o pacote foo de outros projectos e também de sugestões [i]Python.

faz o mesmo trabalho de pip, easy_install etc.,


Utilização setup.py

Vamos começar com algumas definições:

pacote - uma pasta / pasta que contém __init__.py ficheiro.
Módulo - uma python válida ficheiro com .py extensão.
Distribuição - Como um package relaciona-se com outros pacotes e módulos.

Digamos que quer instalar um pacote chamado foo. Então tu tens,
$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

Em vez disso, se você não quiser realmente instalá-lo, mas ainda gostaria de usá-lo. Então faz,

$ python setup.py develop  

Este comando irá criar ligações simbólicas para a pasta de origem dentro dos pacotes do 'site' em vez de copiar as coisas. Por causa disso, é bastante rápido (particularmente para pacotes grandes).


Criar setup.py

Se tens a tua árvore de pacotes tipo,

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

Então, você faz o seguinte na sua setup.py script para que possa ser instalado em alguma máquina:

from setuptools import setup

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

Em vez disso, se a árvore de pacotes for mais complexa como a que está abaixo:

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

Então, o seu setup.py neste caso seria como:

from setuptools import setup

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

Adicionar mais coisas a (setup.py) & torna-o decente.

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='[email protected]',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

O long_description é utilizado em pypi.org como a descrição do seu pacote.


E finalmente, estás pronto para carregar o teu pacote para ... PyPi.org para que outros possam instalar o seu pacote usando pip install yourpackage.

O primeiro passo é reivindicar o nome e o espaço do seu pacote no pypi usando:

$ python setup.py register
Uma vez registado o nome da sua embalagem, ninguém pode reivindicá-lo ou utilizá-lo. Após a inscrição bem sucedida, você tem para enviar o seu pacote para lá (para a nuvem) até,
$ python setup.py upload
Opcionalmente, também pode assinar o seu pacote com GPG by,
$ python setup.py --sign upload

Bónus : ver uma amostra setup.py de um verdadeiro projecto aqui: torchvision-setup.py

 183
Author: kmario23, 2018-09-12 16:04:19

setup.py é a resposta do Python para um instalador multi-plataforma e um ficheiro make.

Se conhece as instalações da linha de comandos, então make && make install traduz-se para python setup.py build && python setup.py install.

Alguns pacotes são Python puro, e só são compilados por byte. Outros podem conter um código nativo, que irá requerer um compilador nativo (como gcc ou cl) e um módulo de interface Python (como swig ou pyrex).

 73
Author: whatnick, 2014-03-20 15:22:01

Se baixaste o pacote que tem "setup.py" na pasta root, você pode instalá - lo executando

python setup.py install

Se está a desenvolver um projecto e se está a perguntar para que é que este ficheiro é útil, verifique a documentação em Python sobre a escrita do Programa de configuração

 43
Author: Pēteris Caune, 2009-09-24 14:21:46

setup.py é um script Python que é normalmente enviado com bibliotecas ou programas, escrito nessa linguagem. Seu propósito é a instalação correta do software.

Muitos pacotes usam a estrutura distutils em conjunção com setup.py.

Http://docs.python.org/distutils/

 15
Author: Ferdinand Beyer, 2009-09-24 14:21:58

Setup.py pode ser usado em dois cenários, primeiro, você quer instalar um pacote Python. Em segundo lugar, você quer criar seu próprio pacote Python. Normalmente o pacote Python padrão tem alguns arquivos importantes como setup.py, configuração.cfg e Manifest.in. quando estiver a criar o pacote Python, estes três ficheiros irão determinar o nome, versão, descrição e outras instalações necessárias (normalmente em .txt file) e alguns outros parâmetros. configuracao.o cfg é ler por setup.py enquanto o pacote é criado (pode ser alcatrão.gz). Manifest.in é onde você pode definir o que deve ser incluído em seu pacote. De qualquer forma, podes fazer um monte de coisas usando setup.py Tipo

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

Existem vários outros comandos que podem ser usados com setup.py . para ajuda

python setup.py --help-commands
 14
Author: Avichal Badaya, 2014-08-12 07:42:55

Quando transferir um pacote com setup.py Abra o seu Terminal (Mac,Linux) ou a linha de comandos (Windows). Usando cd e ajudando-o com o botão de página, defina a localização para a pasta onde transferiu o ficheiro e onde está setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Pressione enter, você deve ver algo assim:

iMac:pakagefolderwithsetupfile user$

Depois escreva python setup.py install :

iMac:pakagefolderwithsetupfile user$ python setup.py install

Pressione enter. Feito!

 6
Author: G M, 2013-09-18 10:49:14
Para instalar um pacote Python que tenha baixado, extrai o pacote e executa o setup.py programa no interior:
python setup.py install
Para mim, isto sempre me pareceu estranho. Seria mais natural apontar um gerenciador de pacotes no download, como se faria em Ruby e Nodejs, eg. gem install rails-4.1.1.gem Um gestor de pacotes também é mais confortável, porque é familiar e confiável. Por outro lado, cada um setup.py é novo, porque é específico para o pacote. Ele exige fé na Convenção " eu confio nisto setup.py toma os mesmos comandos que outros que eu usei no passado". É um imposto lamentável sobre a força de vontade mental. Não estou a dizer ... setup.py o fluxo de trabalho é menos seguro do que um gestor de pacotes (eu entendo que o Pip apenas executa o setup.py por dentro), mas certamente eu sinto que é constrangedor e chocante. Há uma harmonia para os comandos todos sendo para o mesmo aplicativo gerenciador de pacotes. Podes até gostar.
 6
Author: Colonel Panic, 2014-06-03 23:34:21

Para simplificar, setup.py é executado como "__main__" quando você chama as funções de instalação as outras respostas mencionadas. Dentro setup.py, você deve colocar tudo o necessário para instalar o seu pacote.

Frequentes setup.py funções

As duas secções seguintes discutem duas coisas. setup.py os módulos têm.

Setuptools.configuração

Esta função permite-lhe especificar atributos do projecto como o nome do projecto, a versão.... Mais importante, Esta função permite que você instale outras funções se eles forem empacotados corretamente. Veja esta página web para um exemplo de setuptools.configuracao

Estes atributos de setuptools.configurar activar a instalação destes tipos de pacotes:

Funções personalizadas

Num mundo ideal, setuptools.setup trataria de tudo por ti. Infelizmente, nem sempre é assim. Às vezes você tem que fazer coisas específicas, como instalar dependências com o subprocesso comando, para obter o sistema que você está instalando no estado certo para o seu pacote. Tente evitar isso, essas funções ficam confusas e muitas vezes diferem entre os e mesmo distribuição .
 0
Author: user4757074, 2018-02-15 16:06:29

setup.py é um arquivo Python como qualquer outro. Ele pode tomar qualquer nome, exceto por convenção que é chamado setup.py de modo que não há um procedimento diferente com cada script.

Mais frequentemente setup.py é usado para instalar um módulo Python, mas para outros fins:

Módulos:

Talvez este seja o uso mais famoso de setup.py está em módulos. Apesar de poderem ser instalados usando pip, as versões antigas do Python não incluíam pip por omissão e precisavam de ser instalado separadamente.

Se quisesse instalar um módulo mas não quisesse instalar pip, a única alternativa era instalar o módulo a partir do ficheiro setup.py. Isto pode ser conseguido através de python setup.py install. Isto iria instalar o módulo Python no dicionário root (sem pip, easy_install ect).

Este método é frequentemente utilizado quando pip falha. Por exemplo, se a versão correcta em Python do pacote desejado não estiver disponível via piptalvez porque já não esteja disponível mantido, baixar o código e executar python setup.py install faria a mesma coisa, exceto no caso de binários compilados são necessários, (mas irá ignorar a versão Python-a menos que um erro seja retornado).

Outra utilização de setup.py é instalar um pacote a partir do Código. Se um módulo ainda estiver em desenvolvimento, os arquivos wheel não estarão disponíveis e a única maneira de instalar é instalar a partir da fonte diretamente.

Construir Python extensões:

Quando um módulo foi construído, pode ser convertido em módulo pronto para distribuição, usando um programa de configuração de destilados. Uma vez construídos estes podem ser instalados usando o comando acima.

UM programa de configuração é fácil de construir e logo que o ficheiro esteja devidamente configurado e possa ser compilado executando python setup.py build (veja a ligação para todos os comandos).

Mais uma vez é chamado setup.py por facilidade de uso e por convenção, mas pode tomar qualquer nome.

Cython:

Outro uso famoso de arquivos setup.py incluem extensões compiladas. Estes requerem um script de configuração com valores definidos pelo Usuário. Eles permitem execução rápida (mas uma vez compilados são dependentes da plataforma). Aqui está um exemplo simples da documentação :

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

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

Isto pode ser compilado via python setup.py build

Cx_Freeze:

Outro módulo que necessita de um programa de configuração é cx_Freeze. Isto converte o programa em Python para executáveis. Isso permite que muitos comandos como descrições, nomes, ícones, pacotes para incluir, excluir ect e uma vez executado irá produzir uma aplicação distribuível. Um exemplo da documentação :

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)])

Isto pode ser compilado via python setup.py build.

Então o que é um arquivo setup.py?

Muito simplesmente é um script que constrói ou configura algo no ambiente Python.

Um pacote quando distribuído deve conter apenas um programa de configuração mas não é incomum combinar vários juntos em um único script de configuração. Note que isso muitas vezes envolve distutils mas nem sempre (como eu mostrei no meu último exemplo). A coisa para lembrar apenas configura pacote/script Python de alguma forma.

Ele leva o nome para que o mesmo comando possa sempre ser usado ao construir ou instalar.

 0
Author: Simon, 2018-03-14 00:31:10