Comment puis-je ajouter des scripts de post-installation à easy_install / setuptools / distutils?

StackOverflow https://stackoverflow.com/questions/250038

  •  05-07-2019
  •  | 
  •  

Question

Je voudrais pouvoir ajouter un hook à mon fichier setup.py qui sera exécuté après l'installation (soit lors de l'installation d'easy_install ou lors de l'installation de python.py).

Dans mon projet, PySmell , j'ai quelques fichiers de support pour Vim et Emacs. Lorsqu'un utilisateur installe PySmell de la manière habituelle, ces fichiers sont copiés dans l'œuf réel et l'utilisateur doit les rechercher et les placer dans ses répertoires .vim ou .emacs. Ce que je veux, c’est soit demander à l’utilisateur, après l’installation, où il voudrait copier ces fichiers, ou même simplement un message indiquant l’emplacement des fichiers et ce qu’il devrait en faire.

Quel est le meilleur moyen de le faire?

Merci

Mon fichier setup.py ressemble à ce qui suit:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup

version = __import__('pysmell.pysmell').pysmell.__version__

setup(
    name='pysmell',
    version = version,
    description = 'An autocompletion library for Python',
    author = 'Orestis Markou',
    author_email = 'orestis@orestis.gr',
    packages = ['pysmell'],
    entry_points = {
        'console_scripts': [ 'pysmell = pysmell.pysmell:main' ]
    },
    data_files = [
        ('vim', ['pysmell.vim']),
        ('emacs', ['pysmell.el']),
    ],
    include_package_data = True,
    keywords = 'vim autocomplete',
    url = 'http://code.google.com/p/pysmell',
    long_description =
"""\
PySmell is a python IDE completion helper. 

It tries to statically analyze Python source code, without executing it,
and generates information about a project's structure that IDE tools can
use.

The first target is Vim, because that's what I'm using and because its
completion mechanism is very straightforward, but it's not limited to it.
""",
    classifiers = [
        'Development Status :: 5 - Production/Stable',
        'Environment :: Console',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Topic :: Software Development',
        'Topic :: Utilities',
        'Topic :: Text Editors',
    ]


)

EDIT:

Voici un extrait qui illustre l'installation de setup.py de python :

from setuptools.command.install import install as _install

class install(_install):
    def run(self):
        _install.run(self)
        print post_install_message

setup(
    cmdclass={'install': install},
    ...

Pas de chance avec la route easy_install pour le moment.

Était-ce utile?

La solution

Cela dépend de la manière dont l'utilisateur installe votre paquet. Si l'utilisateur exécute réellement "setup.py install", c'est assez simple: ajoutez simplement une autre sous-commande à la commande install (par exemple, install_vim), dont la méthode run () copiera les fichiers souhaités aux emplacements souhaités. Vous pouvez ajouter votre sous-commande à install.sub_commands et la transmettre à setup ().

Si vous voulez un script de post-installation dans un binaire, cela dépend du type de binaire que vous créez. Par exemple, bdist_rpm, bdist_wininst et bdist_msi prennent en charge les scripts de post-installation, car les formats d’emballage sous-jacents prennent en charge les scripts de post-installation.

bdist_egg ne prend pas en charge de mécanisme de post-installation:

http://bugs.python.org/setuptools/issue41

Autres conseils

En guise de solution de contournement, vous pouvez définir l'option zip_ok sur false afin que votre projet soit installé en tant que répertoire décompressé. Les utilisateurs trouveront alors un peu plus facilement le fichier de configuration de l'éditeur.

Dans distutils2, il sera possible d’installer des éléments dans un plus grand nombre de répertoires, y compris des répertoires personnalisés, et de disposer de points d’accès pré / post-installation / suppression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top