Vorrei chiamare la funzione di setup() di distonils di Python o setuptools in un modo leggermente anticonvenzionale, ma non sono sicuro se distutils è pensato per questo tipo di utilizzo.Chiamare direttamente la funzione setup() di distutils 'o setuptools' con nome/opzioni del comando, senza analizzare la riga di comando?
Per fare un esempio, diciamo Al momento ho un file 'setup.py', che assomiglia a questo (sollevato testualmente da Distutils docs - l'utilizzo setuptools è quasi identico):
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='[email protected]',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
Normalmente , per creare solo il file .spec per un RPM di questo modulo, potrei eseguire python setup.py bdist_rpm --spec-only
, che analizza la riga di comando e chiama il codice 'bdist_rpm' per gestire il materiale specifico di RPM. Il file .spec finisce in "./dist".
Come posso modificare la mia chiamata di setup() in modo che esegua il comando 'bdist_rpm' con l'opzione '--spec-only', SENZA l'analisi dei parametri della riga di comando? Posso passare il nome e le opzioni del comando come parametri da configurare()? Oppure posso costruire manualmente una riga di comando e passarla come parametro, invece?
NOTA: so già che potrei chiamare lo script in un processo separato, con una riga di comando vera e propria, usando os.system() o il sottoprocesso modulo o qualcosa di simile. Sto cercando di evitare di utilizzare qualsiasi tipo di richiamo di comandi esterni. Sto cercando specificamente una soluzione che esegua setup() nell'interprete corrente.
Per lo sfondo, sto convertendo alcuni script di shell di gestione della release in un singolo programma Python. Una delle attività è eseguire 'setup.py' per generare un file .spec per ulteriori test preliminari. L'esecuzione di "setup.py" come comando esterno, con le proprie opzioni della riga di comando, sembra un metodo scomodo e complica il resto del programma. Sento che potrebbe esserci un modo più pitonico.
Mi piace la domanda. Per me sembra che 'setup()' sia progettato male - dovrebbe almeno prendere 'sys.argv' come argomento invece di eseguire un po 'di magia. Il parametro può anche essere predefinito a 'sys.argv' (come in' argparse'), ma dovrebbe essere sia documentato che visibile nella firma della funzione. – abukaj