He implementado algo como esto antes ... el comando sdist
se puede extender para manejar argumentos de línea de comando adicionales y para manipular los archivos de datos basados en estos. Si ejecuta python setup.py sdist --help
, incluirá sus argumentos de línea de comando personalizados en la ayuda, lo cual es bueno. Use la siguiente receta:
from distutils import log
from distutils.core import setup
from distutils.command.sdist import sdist
class CustomSdist(sdist):
user_options = [
('packaging=', None, "Some option to indicate what should be packaged")
] + sdist.user_options
def __init__(self, *args, **kwargs):
sdist.__init__(self, *args, **kwargs)
self.packaging = "default value for this option"
def get_file_list(self):
log.info("Chosen packaging option: {self.packaging}".format(self=self))
# Change the data_files list here based on the packaging option
self.distribution.data_files = list(
('folder', ['file1', 'file2'])
)
sdist.get_file_list(self)
if __name__ == "__main__":
setup(
name = "name",
version = "version",
author = "author",
author_email = "author_email",
url = "url",
py_modules = [
# ...
],
packages = [
# ...
],
# data_files = default data files for commands other than sdist if you wish
cmdclass={
'sdist': CustomSdist
}
)
¿Por qué no crear diferentes archivos 'setup.py'? La distribución fuente está disponible como 'sdist'. –
@Brian: estoy al tanto de 'sdist', gracias. Soy mantenedor de un proyecto de código abierto de escala media, y me gustaría adherirme a las convenciones comunes (como tener una 'setup.py' que administre el empaque/instalación). Realmente quiero ver una solución que solo use una secuencia de comandos de configuración. – Constantinius
No puedo proporcionar detalles porque no he tenido ese tipo de problema antes. Un enfoque podría ser proporcionar su propio comando 'sdist' que simplemente llame al viejo' sdist' con diferentes metadatos que dependen de la distribución objetivo. La distribución se puede proporcionar como una opción desde la línea de comando o usando 'platform.linux_distribution' para obtener la misma distribución de destino que la de la máquina que llama' setup.py' de manera predeterminada. – jcollado