Ho implementato qualcosa di simile prima ... il comando sdist
può essere esteso per gestire ulteriori argomenti della riga di comando e per manipolare i file di dati in base a questi. Se esegui python setup.py sdist --help
, includerà gli argomenti della riga di comando personalizzati nella guida, che è piacevole. Utilizzare la seguente ricetta:
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
}
)
Perché non creare diversi file 'setup.py'? La distribuzione di origine è disponibile come 'sdist'. –
@Brian: sono a conoscenza di 'sdist', grazie. Sono un manutentore di un progetto open source di medie dimensioni e mi piacerebbe aderire a convenzioni comuni (come avere un 'setup.py' che gestisce l'imballaggio/l'installazione). Voglio davvero vedere una soluzione che utilizza solo uno script di installazione. – Constantinius
Non posso fornire dettagli perché non ho mai avuto questo tipo di problema. Un approccio potrebbe fornire il proprio comando 'sdist' che chiama semplicemente' sdist' con diversi metadati che dipendono dalla distribuzione di destinazione. La distribuzione può essere fornita come opzione dalla riga di comando o usando 'platform.linux_distribution' per ottenere la stessa distribuzione di destinazione di quella nella macchina che chiama' setup.py' di default. – jcollado