Forum Programmation.python setup.py : liste des fichiers qui vont être installés

Posté par  (site web personnel) . Licence CC By‑SA.
0
25
juin
2013

Bonjour,
je développe une librairie (DChars) que je fais installer via le classique :
python setup.py install --record files.txt

A l'inverse, pour désinstaller ma librairie, je sais qu'il suffit d'écrire :
sudo cat files.txt | xargs rm -rf

J'aimerais connaître le moyen de récupérer le fichier files.txt sans installer quoi que ce soit : est-ce possible ?

Merci !

PS : mon setup.py

MISE A JOUR AVEC REPONSE

Merci à ceux qui m'ont lu !

  • # show me the code!

    Posté par  . Évalué à 2.

    Sans le code de ce setup.py, je ne vois pas comment on pourrait t'aider.

    De plus si c'est toi qui développe DChars, c'est toi qui a du écrire ce setup.py, donc tu dois être la meilleure personne pour répondre à ta propre question.

    Un peu de doc : http://docs.python.org/2/distutils/setupscript.html

  • # désinstaller sans distutils

    Posté par  . Évalué à 1.

    Effectivement, la commande uninstall manque cruellement dans distutils (ça revient fréquemment dans les forums).
    Je ne crois pas qu'il y ait moyen de lister les fichiers sans installer. J'ai essayé avec l'option supplémentaire --dry-run mais il n'écrit pas non plus la liste des fichiers.

    Une autre possibilité est d'utiliser le module site, qui permet de connaître les chemins d'installation possibles.

    Un script de désinstallation ressemblerait à ça :

    import site, os
    from shutil import rmtree
    
    for path in site.getsitepackages():
        lib_path = path + '/dchars'
        egg_info_path = lib_path + '-<version>.egg-info'
        if os.path.exists(lib_path):
            print 'Remove ' + lib_path
            rmtree(lib_path)
        if os.path.exists(egg_info_path):
            print 'Remove ' + egg_info_path
            remove(egg_info_path)

    À adapter, et éventuellement à intégrer à setup.py.
    Je reconnais que ce n'est pas très propre, c'est juste une idée comme ça.
    L'idéal, évidemment, serait de l'intégrer directement au paquet distutils (mais ce serait sûrement fait différemment) !…

    NB : Je ne vois pas comment retrouver le chemin d'installation d'un script (/usr/local/bin en général), mais visiblement il n'y en a pas dans le cas de dchars.

    • [^] # Re: désinstaller sans distutils

      Posté par  (site web personnel) . Évalué à 1.

      Merci hjuvi : la réponse que j'ai glanée sur Stackoverflow figure maintenant dans mon premier post.

      Trust the Python !

      • [^] # Re: désinstaller sans distutils

        Posté par  . Évalué à 1.

        Chez moi egg-info est un fichier, pas un répertoire.
        Il ne contient que les infos que j'ai passé lors du setup.
        Donc je ne vois pas trop comment ça peut marcher… (ceci dit je n'ai pas essayé d'installer pip pour vérifier).

        Le sujet m'intéresse parce que je voudrais aussi désinstaller facilement un paquet sans être obligé d'utiliser un fichier généré par mes soins lors de l'installation.
        De plus l'inconvénient de ce fichier est qu'il ne contient que les fichiers installés, pas les répertoires créés, du coup on garde l'arborescence vide quand on applique le "| xargs rm -rf".

        Sinon j'ai cru comprendre que si distutils n'évoluait plus, c'est parce qu'ils travaillaient maintenant sur un distutils2 (aka packaging), qui devrait proposer le "uninstall" (ce qui serait la moindre des choses !)

        • [^] # Re: désinstaller sans distutils

          Posté par  (site web personnel) . Évalué à 1.

          J'utilise Python3 : peut-être cela fait-il une différence ?

          Chez moi, l'appel à
          python3 setup.py install --root tempdir --record myfiles.txt
          crée myfiles.txt, tempdir/ et le répertoire DChars.egg-infos/ ; mais je ne suis pas tout à fait satisfait de cette méthode : d'autres fichiers que ceux présents dans myfiles.txt sont créés (j'ai en plus un répertoire /usr/local/lib/python3.3/dist-packages/DChars-0.4.0-py3.3.egg/dchars).

          Si tu as une meilleure solution…

          Trust the Python !

          • [^] # Re: désinstaller sans distutils

            Posté par  . Évalué à 1.

            J'ai essayé avec python3 (3.2) mais j'ai une erreur de byte-compilation sur mon code :)
            Ça a quand même eu le temps de créer un fichier egg-info, mais pas de répertoire.
            Je ne vais pas chercher plus loin pour le moment…

            Pour l'instant je vais me contenter des limitations de distutils, et je verrai plus tard pour passer sur python3 et tester le nouveau module packaging.
            Je viens déjà de migrer de PyGTK et PyGst vers PyGI, ça me suffit :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.