38 votes

Comment étendre distutils avec un simple script post-installation?

Je dois exécuter un script simple une fois les modules et les programmes installés. J'ai un peu de difficulté à trouver de la documentation simple sur la façon de procéder. Il semble que je doive hériter de distutils.command.install, remplacer certaines méthodes et ajouter cet objet au script d'installation. Les détails sont toutefois un peu flous et il semble que beaucoup d’efforts soient nécessaires pour un crochet aussi simple. Est-ce que quelqu'un sait un moyen facile de faire cela?

16voto

blokkie Points 763

OK, je l'ai compris. L'idée est essentiellement d'étendre l'une des commandes distutils et d'écraser la méthode d'exécution. Pour indiquer à distutils d'utiliser la nouvelle classe, vous pouvez utiliser la variable cmdclass.

 from distutils.core import setup
from distutils.command.install_data import install_data

class post_install(install_data):
    def run(self):
        # Call parent 
        install_data.run(self)
        # Execute commands
        print "Running"

setup(name="example",
      cmdclass={"install_data": post_install},
      ...
      )
 

J'espère que cela aidera quelqu'un d'autre.

7voto

Woltan Points 5153

Je ne pouvais pas faire fonctionner la réponse de Joe Wreschnig et peaufiner sa réponse de la même manière qu’à l’extension de la documentation distutils. Je suis venu avec ce code qui fonctionne bien sur ma machine.

 from distutils import core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass={'install': my_install})
 

Remarque: je n'ai pas modifié la réponse de Joe car je ne sais pas pourquoi sa réponse ne fonctionnait pas sur ma machine.

0voto

Theuns Alberts Points 31

J'ai une erreur quand j'ai essayé la accepté de répondre ici (peut-être parce que je suis en utilisant la version 2.6 de Python dans ce cas particulier, pas sûr). Cela s'est produit pour les setup.py installer " et "pip install":

sudo python setup.py install

échoue avec l' erreur: erreur dans l'installation.cfg: commande 'my_install' a pas une telle option 'single_version_externally_managed'

ET

sudo pip install . -U

échec de plus avec beaucoup de détails mais aussi avec d'erreur: option --single-version-gérés en externe n'est pas reconnu

Variation sur la accepté de répondre à

Remplacer les importations en provenance de distutils avec setuptools résolu le problème pour moi:

from setuptools import setup
from setuptools.command.install import install

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X