34 votes

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

Je voudrais être en mesure d'ajouter un crochet à mon setup.py qui sera exécuté après l'installation (soit au moment de easy_install qui pratiquent, ou lorsque cela python setup.py installer).

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, et l'utilisateur doit les poissons et de les placer dans son .vim ou .emacs répertoires. Ce que je veux, c'est soit à la demande de l'utilisateur, de post-installation, où serait-il, comme ces fichiers copiés, ou même juste un message de l'impression de l'emplacement des fichiers et que doit-il faire avec eux.

Quelle est la meilleure façon de le faire?

Merci

Mon setup.py ressemble à ceci:

#!/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 stub qui démontre l' python setup.py install:

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 les easy_install route encore.

8voto

Martin v. Löwis Points 61768

Il dépend de la façon dont l'utilisateur installe le paquet. Si l'utilisateur exécute "setup.py installer", il est assez facile: il suffit d'ajouter un autre sous-commande à la commande d'installation (par exemple, install_vim), dont la méthode run() copie les fichiers que vous voulez dans les lieux où vous le souhaitez. Vous pouvez ajouter à votre commande pour installer.sub_commands, et de passer la commande dans la configuration().

Si vous voulez un script post-installation dans un système binaire, cela dépend du type de binaire que vous créez. Par exemple, bdist_rpm, bdist_wininst, et bdist_msi ont le soutien de post-installation de scripts, parce que le sous-jacent d'emballage support de formats de post-installation de scripts.

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

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

0voto

Éric Araujo Points 4212

Pour contourner le problème, vous pouvez définir l'option zip_ok sur false afin que votre projet soit installé en tant que répertoire décompressé, puis il sera un peu plus facile pour vos utilisateurs de trouver le fichier de configuration de l'éditeur.

Dans distutils2, il sera possible d'installer des choses dans plus de répertoires, y compris des répertoires personnalisés, et d'avoir des crochets pré / post-installation / suppression.

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