Подтвердить что ты не робот

Как добавить сценарии после установки в 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 structure that IDE tools can
use.

The first target is Vim, because that what I'm using and because its
completion mechanism is very straightforward, but it 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.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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