Как сделать easy_install выполнять пользовательские команды в setup.py?

Я хочу, чтобы моя setup.py выполняла некоторые пользовательские действия, помимо установки пакета Python (например, установки скрипта init.d, создания каталогов и файлов и т. Д.). Я знаю, что могу настроить классы distutils / setuptools для выполнения своих собственных действий. Проблема, с которой я столкнулась, заключается в том, что все работает, когда я подключаюсь к каталогу пакетов и выполняю установку «python setup.py install», но мои пользовательские классы, похоже, не выполняются, когда я делаю «easy_install mypackage.tar.gz». Вот мой файл setup.py (создайте пустой файл myfoobar.py в одном и том же каталоге для проверки):

import setuptools from setuptools.command import install as _install class install(_install.install): def initialize_options(self): _install.install.initialize_options(self) def finalize_options(self): _install.install.finalize_options(self) def run(self): # Why is this never executed when tarball installed with easy_install? # It does work with: python setup.py install import pdb;pdb.set_trace() _install.install.run(self) setuptools.setup( name = 'myfoobar', version = '0.1', platforms = ['any'], description = 'Test package', author = 'Someone', py_modules = ['myfoobar'], cmdclass = {'install': install}, ) 

То же самое происходит, даже если я импортирую «setup» и «install» из distutils. Любые идеи, как я мог бы сделать easy_install выполнять мои пользовательские классы?

Чтобы уточнить, я не хочу использовать ничего лишнего, например Buildout или Paver.

2 Solutions collect form web for “Как сделать easy_install выполнять пользовательские команды в setup.py?”

Это невозможно. Enthought имеет пользовательскую версию setuptools, которая поддерживает это, но в остальном она находится в трекере ошибок как элемент списка пожеланий, который обсуждался с июня.

Однако есть способы обмануть систему, и вы можете их рассмотреть. Один из способов состоит в том, чтобы иметь свой самый важный модуль, который всегда импортируется первым при использовании вашего пакета, выполняет действия после установки при первом вызове. Затем вам нужно очистить себя, и рассмотрите случай, когда вы не можете писать в библиотеку, потому что администратор установил пакет, а первый пользователь – это кто-то, кроме администратора.

В худшем случае это будет связано с созданием каталога ~ / .mypackage для любого пользователя, который использует пакет, и повторного добавления postinstall для каждого нового пользователя. Каждый раз, когда модуль импортируется, он проверяет наличие ~ / .mypackage. Если его нет, он запускает postinstall и создает его. Если он есть, он пропускает postinstall.

Паувер выводит параметры setuptools на следующий уровень и позволяет писать пользовательские задачи. Он позволяет расширить типичный файл setup.py и обеспечивает простой способ загрузки среды Paver.

  • Как настроить setuptools для python 2.6 на Windows?
  • Установка ScientificPython в качестве зависимости
  • setup.py исключает некоторые файлы python из bdist
  • Python Точка входа «console_scripts» не найдена
  • Как обрабатывать пакеты python с конфликтующими именами?
  • Как я могу подклассифицировать команду сборки?
  • Автоматический номер версии как в setup.py (setuptools) И в исходном коде?
  • py2app подбирает .git subdir пакета во время сборки
  • Python - лучший язык программирования в мире.