Как я могу добавить сценарии после установки в easy_install / setuptools / distutils? - PullRequest
32 голосов
/ 30 октября 2008

Я хотел бы иметь возможность добавить хук к моему setup.py, который будет запускаться после установки (либо при установке easy_install'ing, либо при установке 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 = '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:

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

Ответы [ 2 ]

8 голосов
/ 31 октября 2008

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

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

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

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

0 голосов
/ 28 октября 2011

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

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

...