Как расширить distutils с помощью простого скрипта после установки?

Мне нужно запустить простой скрипт после установки модулей и программ. Я'У меня возникли небольшие проблемы с поиском прямой документации о том, как это сделать. Похоже, мне нужно наследовать от distutils.command.install, переопределить некоторые методы и добавить этот объект в сценарий установки. Специфика немного туманная, и кажется, что для такой простой зацепки нужно приложить немало усилий. Кто-нибудь знает простой способ сделать это?

Ответы на вопрос(4)

Я не могт сделатьДжо Вершнигсработал ответ и подправил свой ответ аналогично распространяющимся distutilsдокументация, Я придумал этот код, который отлично работает на моей машине.

from distutils import core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass={'install': my_install})

Примечание: я нене могу отредактировать ответ Джо, так как я не уверен, почему его ответ не былне работаю на моей машине.

 kynan23 июл. 2013 г., 13:21
@cpburnz Я исправил другой ответ, так какСкорее всего, что люди попробуют в первую очередь.
 cpburnz28 дек. 2012 г., 18:28
Джо Вершнигответ нене работает, потому чтоdistutils.command.install это модуль установки, класс, который он намеревался расширить.distutils.command.install.install

Хорошо, я понял это. Идея состоит в том, чтобы расширить одну из команд distutils и переписать метод run. Чтобы указать distutils использовать новый класс, вы можете использовать переменную cmdclass.

from distutils.core import setup
from distutils.command.install_data import install_data

class post_install(install_data):
    def run(self):
        # Call parent 
        install_data.run(self)
        # Execute commands
        print "Running"

setup(name="example",
      cmdclass={"install_data": post_install},
      ...
      )

Надеюсь, это поможет кому-то еще.

 dm7618 янв. 2013 г., 13:08
искал, как добавлять пользовательские команды целую вечность, и ничего, что я нашел, не сработало бы, пока я не нашел этот ваш пост! Спасибо!

Я получил сообщение об ошибке, когда попробовал принять здесь ответ (возможно, потому что яя использую Python 2.6 в данном конкретном случае, не уверен). Это произошло для обоих »setup.py install ' а также 'pip install ':

sudo python setup.py install

не удается сошибка: ошибка в setup.cfg: команда 'my_install» не имеет такой опцииsingle_version_externally_managed»

А ТАКЖЕ

sudo pip install . -U

терпит неудачу более многословно, но и сошибка: опция --single-version-внешне управляемая не распознана

Вариация принятого ответа

Замена импорта изDistutils сSetuptools решил проблему для меня:

from setuptools import setup
from setuptools.command.install import install
Решение Вопроса

Я копался в источнике distutils в течение дня, чтобы узнать достаточно об этом, чтобы создать кучу пользовательских команд. Это'это не красиво, но это работает.

import distutils.core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass=dict(install=my_install), ...)
 blokkie24 авг. 2009 г., 11:38
Спасибо, Джо. Я уже узнал и отправил аналогичный ответ. Вы были раньше, хотя, так что наслаждайтесь зеленым :)
 Ioannis Filippidis27 мар. 2015 г., 09:18
Пример можно найти вsetup.py изpycparser

Ваш ответ на вопрос