Как мога да добавя скриптове след инсталиране към easy_install / setuptools / distutils?

Бих искал да мога да добавя кука към моя setup.py, която ще се изпълнява след инсталиране (или при easy_install'ing, или когато правя python setup.py install).

В моя проект, 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-chimp, @maverick-wolverine) - person Lutz Prechelt; 21.03.2014

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

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

person Éric Araujo    schedule 28.10.2011