Как сделать 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 выполнять мои пользовательские классы?
- pip игнорирует dependency_links в setup.py
- ImportError: нет модуля с именем extern
- с помощью setuptools с зависимостями post-install и python
- Как получить аргументы, переданные setup.py из pip с помощью опции «--install-option»?
- Не удалось использовать easy_install для установки модулей Python
Чтобы уточнить, я не хочу использовать ничего лишнего, например Buildout или Paver.
- Пакет пространства имен Python как расширение существующего пакета
- Как написать setup.py для включения git-репо в качестве зависимости
- Как объявить зависимость от gi.repository в setup.py (и требуемой библиотеке C)?
- Когда должен использоваться классификатор PyPI «Natural Language»?
- Появляется ли новое «пиковое колесо» python для поддержки колес для зависимостей, перечисленных в test_requires?
2 Solutions collect form web for “Как сделать easy_install выполнять пользовательские команды в setup.py?”
Это невозможно. Enthought имеет пользовательскую версию setuptools, которая поддерживает это, но в остальном она находится в трекере ошибок как элемент списка пожеланий, который обсуждался с июня.
Однако есть способы обмануть систему, и вы можете их рассмотреть. Один из способов состоит в том, чтобы иметь свой самый важный модуль, который всегда импортируется первым при использовании вашего пакета, выполняет действия после установки при первом вызове. Затем вам нужно очистить себя, и рассмотрите случай, когда вы не можете писать в библиотеку, потому что администратор установил пакет, а первый пользователь – это кто-то, кроме администратора.
В худшем случае это будет связано с созданием каталога ~ / .mypackage для любого пользователя, который использует пакет, и повторного добавления postinstall для каждого нового пользователя. Каждый раз, когда модуль импортируется, он проверяет наличие ~ / .mypackage. Если его нет, он запускает postinstall и создает его. Если он есть, он пропускает postinstall.
Паувер выводит параметры setuptools на следующий уровень и позволяет писать пользовательские задачи. Он позволяет расширить типичный файл setup.py и обеспечивает простой способ загрузки среды Paver.
- Начать скрининг по маршруту Flask
- Pandon pandas: заменить значения нескольких столбцов, соответствующих нескольким столбцам из другого фрейма данных