Как добавить постустановочные скрипты в easy_install/setuptools/distutils?

Я хотел бы иметь возможность добавить хук в мой setup.py, который будет запускаться после установки (либо при установке easy_install, либо при установке python setup.py).

В моем проекте PySmell есть несколько файлов поддержки для Vim и Emacs. Когда пользователь устанавливает PySmell обычным способом, эти файлы копируются в настоящее яйцо, и пользователь должен извлечь их и поместить в свои каталоги .vim или .emacs. Я хочу либо спросить пользователя, после установки, куда бы он хотел скопировать эти файлы, либо даже просто сообщение с указанием местоположения файлов и что ему делать с ними.

Как лучше всего это сделать?

Спасибо

Мой setup.py выглядит так:

#!/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 = '[email protected]',
    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',
    ]


)

РЕДАКТИРОВАТЬ:

Вот заглушка, которая демонстрирует 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},
    ...

Пока не повезло с маршрутом easy_install.


person orestis    schedule 30.10.2008    source источник
comment
Я только что узнал, что явный вызов setuptools.install.install:run() не разрешает аргумент настройки install_requires, и кажется, что когда вы это делаете, он работает по-другому.   -  person astronaut    schedule 22.09.2013
comment
@astronaut использует do_egg_install, как описано здесь: stackoverflow.com/questions/21915469/   -  person Ioannis Filippidis    schedule 27.03.2015


Ответы (2)


Это зависит от того, как пользователь устанавливает ваш пакет. Если пользователь на самом деле запускает «setup.py install», это довольно просто: просто добавьте еще одну подкоманду в команду установки (скажем, install_vim), чей метод run() скопирует нужные файлы в нужные места. Вы можете добавить свою подкоманду в install.sub_commands и передать команду в setup().

Если вам нужен сценарий после установки в двоичном файле, это зависит от типа создаваемого вами двоичного файла. Например, bdist_rpm, bdist_wininst и bdist_msi поддерживают сценарии после установки, поскольку базовые форматы упаковки поддерживают сценарии после установки.

bdist_egg не поддерживает механизм после установки:

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

person Martin v. Löwis    schedule 31.10.2008
comment
Просто добавьте еще одну подкоманду в команду установки (скажем, install_vim). И как это сделать? - person limp_chimp; 16.01.2014
comment
Чтобы найти ответ, посмотрите на нижнюю часть вопроса выше. (@limp-шимпанзе, @maverick-росомаха) - person Lutz Prechelt; 21.03.2014

В качестве обходного пути вы можете установить для параметра zip_ok значение false, чтобы ваш проект устанавливался как разархивированный каталог, тогда вашим пользователям будет немного проще найти файл конфигурации редактора.

В distutils2 можно будет устанавливать вещи в большее количество каталогов, включая пользовательские каталоги, а также иметь перехватчики до/после установки/удаления.

person Éric Araujo    schedule 28.10.2011