Estaba a punto de probar el paquete de Python descargado de GitHub y me di cuenta de que no tenía un setup.py , por lo que no podía instalarlo con
pip install -e <folder> En cambio, el paquete tenía un archivo pyproject.toml que parece tener entradas muy similares a las que normalmente tiene setup.py .
Buscar en Google me llevó a PEP-518 y ofrece algunas críticas a setup.py en la sección Justificación . Sin embargo, no dice claramente que se debe evitar el uso de setup.py , o que pyproject.toml reemplazaría por completo a setup.py .
¿Es pyproject.toml algo que se usa para reemplazar setup.py ? ¿O debería venir un paquete con ambos, un pyproject.toml y un setup.py ?
¿Cómo se instalaría un proyecto con pyproject.toml en un estado editable?
Sí, pyproject.toml es el formato de archivo especificado de PEP 518 que contiene los requisitos del sistema de compilación de los proyectos de Python.
Esto resuelve el problema del huevo y la gallina de la dependencia de la herramienta de construcción, es decir, pip puede leer pyproject.toml y qué versión de setuptools o wheel puede necesitar.
Si necesita un setup.py para una instalación editable, puede usar un shim en setup.py :
#!/usr/bin/env python import setuptools if __name__ == "__main__": setuptools.setup()pyproject.toml es el nuevo archivo de configuración de proyecto de Python unificado que reemplaza a setup.py . Las instalaciones editables aún necesitan un setup.py : import setuptools; setuptools.setup()
Para usar pyproject.toml , ejecute python -m pip install .
Luego, si el proyecto usa poetry en lugar de pip , puede instalar dependencias (en %USERPROFILE%\AppData\Local\pypoetry\Cache\virtualenvs ) como esta:
poetry installY luego ejecute dependencias como pytest :
poetry run pytest tests/ Y pre-commit (usa .pre-commit-config.yaml ):
poetry run pre-commit install poetry run pre-commit run --all-filesActualmente, hay varias herramientas de empaquetado que son populares en la comunidad de Python y, aunque las herramientas de setuptools todavía parecen prevalecer, ya no son un estándar de facto. Esta situación crea una serie de molestias tanto para los usuarios finales como para los desarrolladores:
setuptools , la instalación desde la fuente/compilación de una distribución puede fallar si uno no tiene instalado setuptools ;pip . Uno tiene que instalar primero la herramienta de empaquetado y luego usar los comandos específicos de la herramienta para instalar/construir un paquete de distribución; pyproject.toml es un nuevo archivo de configuración introducido por PEP 517 y PEP 518 para resolver estos problemas:
... piense en los pasos (aproximados) necesarios para producir un artefacto construido para un proyecto:
- La verificación de origen del proyecto.
- Instalación del sistema de construcción.
- Ejecutar el sistema de compilación.
Este PEP [518] cubre el paso #2. PEP 517 cubre el paso #3...
Cualquier herramienta también puede ampliar este archivo con su propia sección (tabla) para aceptar opciones específicas de la herramienta, pero depende de ellos y no es obligatorio.
Para los paquetes basados en setuptools , pyproject.toml no está destinado estrictamente a reemplazar setup.py , sino a garantizar su ejecución correcta si aún es necesario. Para otras herramientas de embalaje, sí, lo es:
Cuando existe la clave
build-backend, esta tiene prioridad y el árbol de origen sigue el formato y las convenciones del backend especificado (como tal, no se necesitasetup.pya menos que el backend lo requiera ). Es posible que los proyectos aún deseen incluir unsetup.pypara compatibilidad con herramientas que no usan esta especificación.
La "instalación editable" es una setuptools específica de las herramientas de configuración y, como tal, no es compatible con PEP 517 :
Install Options: -e, --editable <path/url> Install a project in editable mode (ie setuptools "develop mode") Para instalar el paquete basado en setuptools en un modo editable, debe tener un archivo setup.py con al menos un contenido mínimo:
from setuptools import setup setup()Respondiendo solo a esta parte, ya que el resto ha sido muy bien explicado por otros:
¿Cómo se instalaría un proyecto con pyproject.toml en un estado editable?
Clone el proyecto y ejecute la poetry install para crear primero una instalación normal.
Obtén la ruta del virtualenv que ha creado poet usando poetry env info -p . Probablemente será algo así como <absolute path of your cloned project/.venv . Luego verifique cuál es la ruta al directorio site-packages dentro de él. Depende de su versión de Python y será algo así como <absolute path of your cloned project/.venv/lib/python3.9/site-packages .
Cree un archivo .pth dentro de este site-packages . Debe contener una sola línea de texto con la ruta completa del paquete para instalar en modo editable:
echo "<absolute path of your cloned project>" > "<absolute path of your cloned project/.venv/lib/python3.9/site-packages/package_name.pth" En junio de 2021, se aceptó un PEP-660 que describe instalaciones editables para compilaciones basadas en pyproject.toml .
En este PR se trabaja en su implementación para la poetry .
Así que tenemos que esperar a que esté terminado, se fusione y se publique una nueva versión de poetry .
Además de los vinculados anteriormente, mi fuente principal es "pip install -e . ¿equivalente?" - número 34 en github.com/python-poetry/poetry .