Explicación detallada de requirements.txt y setup.py en Python

Reimpreso de: Deephub Imba

Administrar dependencias en un proyecto de Python puede ser un desafío para los principiantes, un problema que históricamente ha sido y ha sido objeto de quejas.

En el artículo de hoy, discutiremos cómo administrar adecuadamente las dependencias para los proyectos de Python. Más específicamente, se discutirá el propósito del archivo requirements.txt y cómo usar las herramientas de configuración para distribuir un paquete personalizado de Python y permitir que otros usuarios lo usen y desarrollen más. Además, se discutirá el propósito de los archivos de configuración (es decir, setup.cfg y setup.py) y cómo usarlos con el archivo de requisitos, lo que puede facilitar el proceso de desarrollo y redistribución de paquetes.

99232b4893b8a7e7989fd36ed1891236.png

¿Cuáles son las dependencias de un proyecto de Python?

Comencemos con las dependencias de paquetes; describa qué son y cómo administrarlas correctamente, ya que esto puede hacer que los proyectos de Python sean más fáciles de mantener.

En pocas palabras, las dependencias son otros paquetes externos de Python de los que depende nuestro proyecto Python. Por ejemplo, en la dirección de AI, los paquetes más utilizados son Numpy y Pandas. En Python, estas dependencias generalmente se pueden encontrar en Python Package Index (PyPI) u otras herramientas de administración (como Nexus). Usaremos PyPI como ejemplo más adelante porque es la herramienta de administración de paquetes más utilizada que todos usan.

Ahora nuestro propio proyecto de Python puede necesitar hacer referencia a una versión específica de un paquete de terceros que tiene dependencias. Esta situación puede generar conflictos de dependencia, ya que todas nuestras dependencias tienen (al menos) dos dependencias que pueden depender del mismo paquete, pero cada una requiere una versión específica de ese paquete externo (digamos que una requiere 1.0, mientras que otra requiere 2.0). En este caso particular, debemos decirle a pip qué hacer con las dependencias y qué versiones específicas necesitamos.

En general, necesitamos los requisitos.txt para especificar las dependencias y las versiones del proyecto, así que veamos primero el formato de los requisitos.txt

archivo requisitos.txt

requirements.txt es un archivo que enumera todas las dependencias de un proyecto de Python. Como se mencionó, también puede contener dependencias de dependencias. Las columnas pueden especificar una versión específica (usando ==), >= o <=, o incluso ambos, además del nombre del paquete dependiente.

Archivo de ejemplo de requisitos.txt

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

Estas dependencias se pueden instalar a través de pip (generalmente en un entorno virtual) usando el siguiente comando:

pip install -r requirements.txt

En el ejemplo anterior, especificamos algunas dependencias. Por ejemplo, para un paquete de pandas que no tiene una versión asociada, pip instalará la última versión normalmente, a menos que una de las otras dependencias tenga algún conflicto con él (si hay un conflicto, pip instalará la última versión de pandas que satisfaga las condiciones especificado por las dependencias restantes). Para pytest, el administrador de paquetes instalará una versión específica (es decir, 4.0.1), mientras que para matplotlib, se instalará la última versión al menos mayor o igual a 2.2 (esto nuevamente depende de si hay otras dependencias con requisitos específicos, en caso contrario se instalará con la última versión de las condiciones). Para paquetes numpy, pip intentará instalar la última versión entre 1.15.0 (inclusive) y 1.21.0 (exclusivo).

Una vez instaladas todas las dependencias, pip freezepuede . Este comando enumerará todos los paquetes y sus versiones específicas (es decir, ==).

requisitos.txt es muy útil, pero es solo para el desarrollo y lanzamiento de nuestro proyecto (como la implementación en línea, etc.). Si desea publicar su código en PyPI para que otros lo usen, necesita más que solo este archivo.

herramientas de configuración en Python

setuptools es un paquete creado sobre distutils que ayuda a los desarrolladores a publicar rápidamente paquetes de Python. Entre otras cosas, proporciona funciones que facilitan la gestión de dependencias.

Cuando desea publicar un paquete, generalmente debe completar algunos metadatos, como el nombre del paquete, la versión, las dependencias, el punto de entrada, etc. setuptools proporciona funciones para simplificar estas operaciones.

Los metadatos del proyecto y otra información deben definirse en el archivo setup.py, como la siguiente demostración:

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

La información que completamos es puramente declarativa, por lo que un mejor enfoque es definir estos metadatos e información en un archivo llamado setup.cfg y luego simplemente llamar a setup() en el archivo setup.py. El archivo setup.cfg se ve así:

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

Esto mantiene un código mínimo en nuestro archivo setup.py:

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

El parámetro install_requires anterior es similar a requirements.txt, puede usar los operadores <, >, <=, >=, == o ! =, seguido de un identificador de versión. Cuando se instala el proyecto, las dependencias se descargan e instalan de acuerdo con esta configuración.

¿Necesitamos los archivos requirements.txt y setup.py/setup.cfg?

Esto debe tratarse caso por caso. El primero entre los requisitos.txt y setup.py se usa generalmente para implementar diferentes requisitos:

  • Si se usa principalmente para fines de desarrollo de proyectos y no está destinado a publicarse en pypi, requirements.txt es suficiente (incluso si el paquete se desarrolla en varias máquinas)

  • Si el paquete solo se desarrolla en una sola máquina, pero debe lanzarse a pypi como un paquete pip, entonces setup.py/setup.cfg es suficiente.

  • Si el paquete se desarrolla en varias máquinas y debe publicarse en pypi, se requieren los requisitos.txt (varias máquinas necesitan el mismo entorno de desarrollo) y los archivos setup.py/setup.cfg (publicados en pypi).

Otra es que si usa ambos, el archivo setup.py (setup.cfg) debe contener una lista de dependencias abstractas, mientras que el archivo requirements.txt debe contener dependencias específicas con pines específicos para cada versión del paquete (use == para especificar versión de dependencias).

Aquí está la definición oficial de la documentación de Python:

install_requires (es decir, setup.py) define las dependencias de un solo proyecto, mientras que requirements.txt se suele utilizar para definir el entorno completo de Python.

Aunque install_requires tiene pocos requisitos, requirements.txt normalmente contiene una lista exhaustiva de versiones fijas para permitir instalaciones repetibles para un entorno completo.

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

Resumir

Este artículo analiza la importancia de una gestión adecuada de las dependencias al desarrollar proyectos y aplicaciones de Python. También describe el propósito del archivo requirements.txt y cómo usarlo con los archivos de configuración de las herramientas de instalación (es decir, setup.py y setup.cfg) para garantizar que otros desarrolladores puedan instalar, ejecutar, desarrollar e incluso probar los paquetes de código fuente de Python. .código

setuptools no es un reemplazo completo para el archivo requirements.txt. Y en la mayoría de los casos, es posible que estos dos archivos deban existir al mismo tiempo, de modo que las dependencias de los paquetes se puedan administrar y publicar correctamente.

Autor: Giorgos Myrianthous


Lectura recomendada:

Mi intercambio de reclutamiento escolar por Internet de 2022

Mi Resumen 2021

Hablando de la diferencia entre la publicación de algoritmos y la publicación de desarrollo

Resumen de salarios de investigación y desarrollo de reclutamiento de escuelas de Internet

Para series de tiempo, todo lo que puedes hacer.

¿Qué es el problema de la secuencia espacio-temporal? ¿Qué modelos se utilizan principalmente para tales problemas? ¿Cuáles son las principales aplicaciones?

Número público: coche caracol AI

Mantente humilde, mantente disciplinado, mantente progresista

e19e3cda943469338a193c36e6f40af8.png

Envíe [Snail] para obtener una copia del "Proyecto práctico de IA" (AI Snail Car)

Envíe [1222] para obtener una buena nota de cepillado de leetcode

Envíe [AI Four Classics] para obtener cuatro libros electrónicos clásicos de AI

Supongo que te gusta

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