Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

313
Vistas
Cómo especificar requisitos en metadatos de paquetes de Python

La especificación de metadatos básicos documenta el campo de metadatos Requires-External, que parece ser para especificar dependencias del sistema (no Python).

Sin embargo, ¿cómo se especifica realmente este campo? Esto es lo que he probado:

 . ├── mypackage │  └── __init__.py └── setup.py

Contenido de setup.py

 from setuptools import setup setup( name="mypackage", description="blah blah", url='https://example.org', version="0.1", packages=["mypackage"], requires_external=[ "C", "libpng (>=1.5)", 'make; sys_platform != "win32"', ], )

Cuando construí este paquete, esos metadatos no estaban incluidos.

 Metadata-Version: 2.1 Name: mypackage Version: 0.1 Summary: blah blah Home-page: https://example.org License: UNKNOWN Platform: UNKNOWN UNKNOWN

Entonces, ¿cuál es la sintaxis para pasar Requires-External a setuptools/distutils? Nota: esta pregunta no se refiere a los metadatos Requires-Dist .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Entonces, ¿cuál es la sintaxis para pasar Requires-External a setuptools/distutils?

No hay ninguno por defecto, ya que ni distutils ni setuptools admiten el campo. Además, la palabra clave requires_external arg tampoco es compatible; se ignora silenciosamente, al igual que cualquier otra palabra clave desconocida arg.

Para agregar soporte local para require_external requires_external , debe proporcionar su propia implementación de distribución. Ejemplo mínimo (requiere Python 3.9):

 from setuptools.dist import Distribution as DistributionOrig class Distribution(DistributionOrig): _DISTUTILS_UNSUPPORTED_METADATA = DistributionOrig._DISTUTILS_UNSUPPORTED_METADATA | {'requires_external': dict}

Ahora puede pasar requires_external a setup() cuando se combina con distclass :

 setup( ..., requires_external=[ 'C', 'libpng (>=1.5)', 'make; sys_platform != "win32"', ], distclass=Distribution, )

El siguiente objetivo es escribir el contenido de requires_external en PKG-INFO . Esto es bastante complicado de hacer a través de los metadatos de distribución porque las herramientas de setuptools los métodos relevantes ( DistributionMetadata.read_pkg_file() y DistributionMetadata.write_pkg_file() ) con sus propios impls monolíticos. La forma más fácil para este IMO es modificar PKG-INFO post factum a través de un egg_info personalizado:

 import email from pathlib import Path from setuptools.command.egg_info import egg_info as egg_info_orig class egg_info(egg_info_orig): def run(self): super().run() # PKG-INFO is now guaranteed to exist pkg_info_file = Path(self.egg_info, 'PKG-INFO') pkg_info = email.message_from_bytes(pkg_info_file.read_bytes()) for req in self.distribution.metadata.requires_external: pkg_info.add_header('Requires-External', req) pkg_info_file.write_bytes(pkg_info.as_bytes())

Pase su propio egg_info a través del argumento cmdclass en setup() :

 setup( ..., requires_external=[ 'C', 'libpng (>=1.5)', 'make; sys_platform != "win32"', ], distclass=Distribution, cmdclass={'egg_info': egg_info}, )
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda