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

StackOverflow https://stackoverflow.com/questions/250038

  •  05-07-2019
  •  | 
  •  

Вопрос

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

В моем проекте, ПиСмелл, У меня есть несколько файлов поддержки для Vim и Emacs.Когда пользователь устанавливает PySmell обычным способом, эти файлы копируются в самом egg, и пользователь должен извлечь их и поместить в свои каталоги .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',
    ]


)

Редактировать:

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top