Explicação detalhada de requirements.txt e setup.py em Python

Reproduzido de: Deephub Imba

Gerenciar dependências em um projeto Python pode ser um desafio para iniciantes, um problema que historicamente tem sido e tem sido reclamado.

No artigo de hoje, discutiremos como gerenciar corretamente as dependências para projetos Python. Mais especificamente, a finalidade do arquivo requirements.txt será discutida e como usar setuptools para distribuir um pacote Python personalizado e permitir que outros usuários o usem e desenvolvam ainda mais. Além disso, será discutido o propósito dos arquivos de instalação (ie setup.cfg e setup.py) e como usá-los com o arquivo de requisitos, o que pode facilitar o processo de desenvolvimento e redistribuição de pacotes.

99232b4893b8a7e7989fd36ed1891236.png

Quais são as dependências de um projeto Python

Vamos começar com as dependências de pacote; descreva o que são e como gerenciá-las adequadamente, pois isso pode facilitar a manutenção de projetos Python.

Simplificando, dependências são outros pacotes Python externos dos quais nosso projeto Python depende. Por exemplo, na direção de IA, os pacotes mais usados ​​são Numpy e Pandas. Em Python, essas dependências geralmente podem ser encontradas no Python Package Index (PyPI) ou em outras ferramentas de gerenciamento (como o Nexus). Usaremos o PyPI como exemplo mais tarde porque é a ferramenta de gerenciamento de pacotes mais usada por todos.

Agora, nosso próprio projeto Python pode precisar fazer referência a uma versão específica de um pacote de terceiros que tenha dependências. Essa situação pode levar a conflitos de dependência, já que todas as nossas dependências têm (pelo menos) duas dependências que podem depender do mesmo pacote, mas cada uma requer uma versão específica desse pacote externo (digamos, uma requer 1.0, enquanto outra requer 2.0). Neste caso em particular, precisamos dizer ao pip o que fazer com as dependências e quais versões específicas precisamos.

Em geral, precisamos de requirements.txt para especificar as dependências e versões do projeto, então vamos ver primeiro o formato de requirements.txt

arquivo requirements.txt

requirements.txt é um arquivo que lista todas as dependências de um projeto Python. Como mencionado, ele também pode conter dependências de dependências. As colunas podem especificar uma versão específica (usando ==), >= ou <=, ou mesmo ambas, além do nome do pacote dependente.

Exemplo de arquivo requirements.txt

matplotlib>=2.2
numpy>=1.15.0, <1.21.0
pandas
pytest==4.0.1

Essas dependências podem ser instaladas via pip (geralmente em um ambiente virtual) usando o seguinte comando:

pip install -r requirements.txt

No exemplo acima, especificamos algumas dependências. Por exemplo, para um pacote pandas que não tem uma versão associada, o pip instalará a versão mais recente normalmente, a menos que uma das outras dependências tenha algum conflito com ela (se houver um conflito, o pip instalará a versão mais recente do pandas que satisfaça as condições especificado pelas dependências restantes). Para pytest, o gerenciador de pacotes instalará uma versão específica (ou seja, 4.0.1), enquanto para matplotlib, a versão mais recente pelo menos maior ou igual a 2.2 será instalada (isso novamente depende se existem outras dependências com requisitos específicos, caso contrário, será instalado com a versão mais recente das condições). Para pacotes numpy, o pip tentará instalar a versão mais recente entre 1.15.0 (inclusive) e 1.21.0 (exclusivo).

Depois que todas as dependências forem instaladas, você pip freezepoderá . Este comando listará todos os pacotes e suas versões específicas (ie ==).

O requirements.txt é muito útil, mas serve apenas para o desenvolvimento e lançamento do nosso projeto (como implantação online, etc.). Se você deseja publicar seu código no PyPI para que outras pessoas usem, você precisa de mais do que apenas este arquivo.

ferramentas de configuração em Python

setuptools é um pacote construído sobre distutils que ajuda os desenvolvedores a publicar rapidamente pacotes Python. Entre outras coisas, ele fornece recursos que facilitam o gerenciamento de dependências.

Quando você deseja publicar um pacote, geralmente precisa preencher alguns metadados, como nome do pacote, versão, dependências, ponto de entrada, etc. setuptools fornece funções para simplificar essas operações.

Os metadados do projeto e outras informações precisam ser definidas no arquivo setup.py, como a seguinte demonstração:

from setuptools import setup
setup(     
    name='demo',
    author='deephub',     
    version='0.1',     
    install_requires=[         
        'pandas',         
        'numpy',
        'matplotlib',
    ],
    # ... more options/metadata
)

As informações que preenchemos são puramente declarativas, portanto, uma abordagem melhor é definir esses metadados e informações em um arquivo chamado setup.cfg e, em seguida, simplesmente chamar setup() no arquivo setup.py . O arquivo setup.cfg se parece com isso:

[metadata]
name = demo
author = deephub
version = 0.1
[options]
install_requires =
    pandas
    numpy
    matplotlib

Isso mantém o código mínimo em nosso arquivo setup.py:

from setuptools import setup
if __name__ == "__main__":
    setup()

O parâmetro install_requires acima é semelhante ao requirements.txt, você pode usar os operadores <, >, <=, >=, == ou ! =, seguido por um identificador de versão. Quando o projeto é instalado, as dependências são baixadas e instaladas de acordo com essa configuração.

Precisamos dos arquivos requirements.txt e setup.py/setup.cfg?

Isso precisa ser tratado caso a caso. O primeiro entre requirements.txt e setup.py geralmente é usado para implementar diferentes requisitos:

  • Se for usado principalmente para fins de desenvolvimento de projetos e não se destina a ser publicado em pypi, requirements.txt é suficiente (mesmo que o pacote seja desenvolvido em várias máquinas)

  • Se o pacote for desenvolvido apenas em uma única máquina, mas precisar ser liberado para pypi como um pacote pip, então setup.py/setup.cfg será suficiente.

  • Se o pacote for desenvolvido em várias máquinas e precisar ser publicado em pypi, isso exigirá requirements.txt (várias máquinas precisam do mesmo ambiente de desenvolvimento) e arquivos setup.py/setup.cfg (publicados em pypi) ).

Outra é que se você usar ambos, o arquivo setup.py (setup.cfg) deve conter uma lista de dependências abstratas, enquanto o arquivo requirements.txt deve conter dependências específicas com pinos específicos para cada versão do pacote (use == para especificar Dependências Versão).

Aqui está a definição oficial da documentação do Python:

install_requires (ou seja, setup.py ) define as dependências de um único projeto, enquanto o requirements.txt geralmente é usado para definir o ambiente Python completo.

Embora install_requires tenha poucos requisitos, o requirements.txt geralmente contém uma lista exaustiva de versões fixas para permitir instalações repetíveis para um ambiente completo.

De: https://packaging.python.org/en/latest/discussions/install-requires-vs-requirements/#requirements-files

Resumir

Este artigo discute a importância do gerenciamento de dependência adequado ao desenvolver projetos e aplicativos Python. Ele também descreve a finalidade do arquivo requirements.txt e como usá-lo com os arquivos de configuração setuptools (ou seja, setup.py e setup.cfg) para garantir que outros desenvolvedores possam instalar, executar, desenvolver e até mesmo testar o código-fonte dos pacotes Python . código.

setuptools não é um substituto completo para o arquivo requirements.txt. E na maioria dos casos, esses dois arquivos podem precisar existir ao mesmo tempo, para que as dependências do pacote possam ser gerenciadas adequadamente e o pacote publicado.

Autor: Giorgos Myrianthous


Leitura recomendada:

Meu Compartilhamento de Recrutamento Escolar na Internet de 2022

Meu resumo de 2021

Falando sobre a diferença entre postagem de algoritmo e postagem de desenvolvimento

Resumo do salário de pesquisa e desenvolvimento de recrutamento escolar na Internet

Para séries temporais, tudo o que você pode fazer.

Qual é o problema da sequência espaço-temporal? Quais modelos são usados ​​principalmente para esses problemas? Quais são as principais aplicações?

Número público: carro caracol AI

Mantenha-se humilde, mantenha-se disciplinado, mantenha-se progressivo

e19e3cda943469338a193c36e6f40af8.png

Envie [Snail] para obter uma cópia do "Hands-on AI Project" (AI Snail Car)

Envie [1222] para obter uma boa nota de escovação de leetcode

Envie [AI Four Classics] para obter quatro e-books clássicos de IA

Acho que você gosta

Origin blog.csdn.net/qq_33431368/article/details/123587593
Recomendado
Clasificación