Pergunta

Alguém por favor pode explicar, o que é setup.py e como ele pode ser configurado ou usado?

Foi útil?

Solução

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

Isso permite que você facilmente instalar pacotes Python. Muitas vezes é o suficiente para escrever:

$ pip install . 

pip vai usar setup.py para instalar o módulo. Evite chamar setup.py diretamente.

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

Outras dicas

Ela ajuda a instalar um pacote foo python em sua máquina (também pode ser em virtualenv) para que você possa importar o foo pacote de outros projetos e também de [I] prompts Python.

Ele faz o trabalho similar de pip, easy_install etc.,


Usando setup.py

Vamos começar com algumas definições:

Package - Uma pasta / diretório que contém o arquivo __init__.py
. Módulo -. Um arquivo de python válidos com extensão .py
Distribuição - Como um pacote se relaciona com outros pacotes e módulos .

Vamos dizer que você quer instalar um pacote chamado foo. Então você faz,

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

Em vez disso, se você não quer realmente instalá-lo, mas ainda gostaria de usá-lo. Então faça,

$ python setup.py develop  

Este comando irá criar links simbólicos para o diretório de origem no prazo de site-packages Em vez de copiar as coisas. Devido a isso, é bastante rápido (principalmente em grandes pacotes).


Criar setup.py

Se você tem sua árvore de pacotes como,

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

Em seguida, faça o seguinte em sua setup.py script para que ele pode ser instalado em uma máquina:

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
)

Em vez disso, se a sua árvore de pacotes é mais complexa como a abaixo:

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

Em seguida, o 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='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Adicionar mais coisas para (setup.py) & tornar mais 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='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',
           ]
)

O long_description é usado na pypi.org como a descrição README do seu pacote.


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

O primeiro passo é a reivindicar o seu nome & espaço da embalagem em pypi usando:

$ python setup.py register

Uma vez que o nome do pacote é registrada, ninguém pode reivindicar ou usá-lo. Após o registo bem sucedido, você tem que carregar seu pacote lá (para a nuvem) por,

$ python setup.py upload

Opcionalmente, você também pode assinar o pacote com GPG por,

$ python setup.py --sign upload

Bonus : Veja uma amostra setup.py a partir de um projeto real aqui: torchvision-setup.py

setup.py é a resposta de Python para um instalador multi-plataforma e arquivo make.

Se você estiver familiarizado com as instalações de linha de comando, então make && make install traduz em python setup.py build && python setup.py install.

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

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

python setup.py install

Se você estiver desenvolvendo um projeto e estão se perguntando o que este arquivo é útil para, verifique documentação Python em escrever o Setup Script

setup.py é um script Python que normalmente é fornecido com bibliotecas ou programas, escrito nesse idioma. Seu objetivo é a instalação correta do software.

Muitos pacotes de usar a estrutura distutils em conjunto com setup.py.

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

setup.py pode ser usado em dois cenários, Primeiro, você quer instalar um pacote de Python. Em segundo lugar, você quer criar seu próprio pacote Python. pacote Python normalmente padrão tem alguns arquivos importantes, como setup.py, setup.cfg e Manifest.in. Quando você está criando o pacote Python, esses três arquivos determinará o (conteúdo em PKG-INFO sob ovo-info pasta) nome, versão, descrição, outras instalações necessárias (normalmente em arquivo .txt) e alguns outros parâmetros. setup.cfg é lido por setup.py enquanto pacote é criado (poderia ser tar.gz). Manifest.in é onde você pode definir o que deve ser incluído no seu pacote. De qualquer forma você pode fazer monte de coisas usando setup.py como

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 bando de outros comandos que podem ser usados ??com setup.py. para a ajuda

python setup.py --help-commands

Quando você baixar um pacote com setup.py abrir o seu Terminal (Mac, Linux) ou Command Prompt (Windows). Usando cd e ajudá-lo com o botão Tab definir o certo caminho para a pasta onde você baixou o arquivo e onde há setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

pressione Enter, você deve ver algo como isto:

iMac:pakagefolderwithsetupfile user$

Em seguida, digite após este python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

Imprensa enter. Feito!

Para instalar um Python pacote que você tenha baixado, você extraia o arquivo e execute o interior setup.py script:

python setup.py install

Para mim, este sempre se sentiu estranho. Seria mais natural para apontar um gerenciador de pacotes para o download, como seria de se fazer em Ruby e NodeJS, por exemplo. gem install rails-4.1.1.gem

Um gerenciador de pacotes é mais confortável também, porque é familiar e confiável. Por outro lado, cada setup.py é novo, porque é específico para o pacote. Ele exige fé na convenção "Eu confio esta setup.py leva os mesmos comandos como outros que tenho usado no passado". Isso é um imposto lamentável na força de vontade mental.

Não estou dizendo que o fluxo de trabalho setup.py é menos seguro do que um gerenciador de pacotes (eu entendo Pip apenas executa o interior setup.py), mas certamente eu sinto que é awkard e dissonante. Há uma harmonia para comandos de todo o ser ao mesmo aplicativo gerenciador de pacotes. Você pode até mesmo crescer fond-lo.

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

Na maioria das vezes setup.py é usado para instalar um módulo Python, mas servidor outros fins:

Módulos:

Talvez este seja o uso mais famoso de setup.py está em módulos. Embora eles podem ser instalados usando pip, versões antigas do Python não incluem pip por padrão e eles precisavam ser instalados separadamente.

Se você quiser instalar um módulo, mas não deseja instalar pip, praticamente a única alternativa era para instalar o módulo de arquivo setup.py. Isto poderia ser conseguido via python setup.py install. Este seria instalar o módulo Python ao dicionário root (sem pip, easy_install ect).

Este método é frequentemente usado quando pip falhará. Por exemplo, se a versão correta Python do pacote desejado não estiver disponível via pipperhaps porque já não é mantida,, baixando a fonte e correndo python setup.py install iria realizar a mesma coisa, exceto no caso de binários compilados são necessárias, (mas vai desconsiderar a versão Python -a menos um erro é retornado).

Outro uso do setup.py é instalar um pacote de fonte. Se um módulo ainda está em desenvolvimento os arquivos de rodas não estará disponível ea única maneira de instalar é instalar a partir da fonte diretamente.

extensões Edifício Python:

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

Um script de instalação é fácil de construir e uma vez que o arquivo tenha sido configurado corretamente e pode ser compilado, executando python setup.py build (veja o link para todos os comandos).

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

Cython:

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

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

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

Esta pode ser compilado através python setup.py build

Cx_Freeze:

Outro módulo requer um script de instalação é cx_Freeze. Isso converte script Python para executáveis. Isso permite que muitos comandos como descrições, nomes, ícones, pacotes para incluir, excluir ect e uma vez prazo, irá produzir uma aplicação distribuível. Um exemplo do 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)])

Esta pode ser compilado através 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ídos deve conter apenas um script de instalação, mas não é incomum para combinar vários juntos em um único script de instalação. Observe isso muitas vezes envolve distutils mas nem sempre (como eu mostrei no meu último exemplo). A coisa a lembrar que apenas configura Python pacote / script de alguma forma.

É preciso o nome para o mesmo comando pode sempre ser utilizado na construção ou instalação.

Para tornar mais simples, setup.py é executado como "__main__" quando você chamar o instalar funções as outras respostas mencionadas. Dentro setup.py, você deve colocar tudo o necessário para instalar o pacote.

Funções comuns setup.py

As duas seções seguintes abordam duas coisas muitos módulos setup.py ter.

setuptools.setup

Esta função permite que você especifique os atributos projeto como o nome do projeto, a versão .... Mais importante, esta função permite-lhe instalar outras funções se eles estão devidamente embalados. Consulte esta página para um exemplo de setuptools.setup
Estes atributos de setuptools.setup permitem instalar estes tipos de pacotes:

  • Pacotes que são importados para o projeto e listadas na PyPI usando setuptools.findpackages :

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

  • Os pacotes não em PyPI , mas pode ser baixado a partir de um URL usando dependency_links

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

As funções personalizadas

Em um mundo ideal, setuptools.setup iria lidar com tudo para você. Infelizmente isso nem sempre é o caso. Às vezes você tem que fazer coisas específicas, como a instalação de dependências com o href="https://docs.python.org/2/library/subprocess.html" rel="nofollow noreferrer"> subprocess comando , para obter o sistema que você está instalando em no estado certo para o seu pacote. Tente evitar isso, essas funções ficar confusa e muitas vezes diferem entre OS e até mesmo distribuição .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top