web-dev-qa-db-fra.com

Nettoyage du répertoire de construction dans setup.py

Comment pourrais-je faire mon setup.py pré-supprimer et post-supprimer le répertoire de construction?

45
Ram Rachum

Pour la pré-suppression, supprimez-la simplement avec distutils.dir_util.remove_tree avant d'appeler le programme d'installation.

Pour la post-suppression, je suppose que vous ne souhaitez post-supprimer qu'après les commandes sélectionnées. Sous-classe la commande respective, remplacez sa méthode d'exécution (pour appeler remove_tree après avoir appelé l'exécution de base) et passez la nouvelle commande dans le dictionnaire cmdclass de l'installation.

11
Martin v. Löwis

this y répond-il? IIRC, vous devrez utiliser le --all drapeau pour se débarrasser de choses en dehors de build/lib:

python setup.py clean --all
106
Matt Ball

Cela efface le répertoire de construction avant l'installation

python setup.py clean --all install

Mais selon vos besoins: cela le fera avant et après

python setup.py clean --all install clean --all
8
Adrian Lopez

Voici une réponse qui combine l'approche programmatique de la réponse de Martin avec la fonctionnalité de la réponse de Matt (un clean qui prend en charge toutes les zones de construction possibles):

from distutils.core import setup
from distutils.command.clean import clean
from distutils.command.install import install

class MyInstall(install):

    # Calls the default run command, then deletes the build area
    # (equivalent to "setup clean --all").
    def run(self):
        install.run(self)
        c = clean(self.distribution)
        c.all = True
        c.finalize_options()
        c.run()

if __name__ == '__main__':

    setup(
        name="myname",
        ...
        cmdclass={'install': MyInstall}
    )
6
Alan