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

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне нужно запустить простой скрипт после установки модулей и программ.У меня возникли небольшие проблемы с поиском прямой документации о том, как это сделать.Похоже, мне нужно наследовать от distutils.command.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), ...)

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

Хорошо, я понял это.Идея состоит в том, чтобы расширить одну из команд 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},
      ...
      )

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

я не мог сделать Джо Решнигответ работал и подправил свой ответ аналогично расширению 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})

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

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

sudo python setup.py install

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

И

sudo pip install . -U

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

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

Замена импорта из диституты с инструменты настройки решил проблему для меня:

from setuptools import setup
from setuptools.command.install import install
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top