Создайте скрипт Python, который устанавливает модули Python и запускает некоторые команды - PullRequest
0 голосов
/ 10 октября 2019

Я хочу создать тонкую оболочку для этой библиотеки https://github.com/jupyter-incubator/sparkmagic#installation

Как видно из ссылки, для этапа установки требуется

  1. установка некоторых пакетов с помощью pip
  2. запустить какую-нибудь команду типа jupyter enable ... или jupyter-kernelspec install
  3. пользовательский файл конфигурации, который я хочу сгенерировать и поместить в правильное место

Я проверяю, какиеЯ должен сделать установку такой же автоматической, как вызов скрипта. До сих пор я придумал создание сценария bash со всеми этими командами. Таким образом, он работает с простым install.sh, но у меня могут быть проблемы, так как я не буду знать, какие двоичные файлы Python использовать. Если пользователь хочет установить lib для python2 или python3, у него не может быть этого выбора, пока он не коснется сценария.

Затем я попытался использовать setup.py и переопределить cmdclass для вставки пользовательского кода * 1021. *

from setuptools import setup
from setuptools.command.develop import develop
from setuptools.command.install import install


class PostDevelopCommand(develop):
  """Post-installation for development mode."""
  def run(self):
    develop.run(self)
    print("do things")

class PostInstallCommand(install):
  """Post-installation for installation mode."""
  def run(self):
    install.run(self)
    print("do things")

setup(
  ...
  install_requires=['sparkmagic'],
  cmdclass={
    'develop': PostDevelopCommand,
    'install': PostInstallCommand,
},

...
)

, но пользовательские распечатки работали только при запуске python setup.py install, но не для pip install

Я бы хотел, чтобы этот последний вариант работал, но если это неправильный шаблон, чтобы сделать этоВы не могли бы подсказать мне, куда идти?

1 Ответ

0 голосов
/ 10 октября 2019

Проблема не в pip install напрямую, а в колесах . Проекты, упакованные как колесо, не могут иметь пользовательских шагов установки. Смотрите, например, это обсуждение . Поскольку pip предпочитает работать с колесами, при необходимости создавая их локально, ваши пользовательские шаги не выполняются во время установки. Хотя, возможно, есть способы предотвратить шаг колеса.

Зная это, вы, вероятно, должны следовать совету Яна Влчинского в его комментарии для ответа на этот вопрос: Постинсталляцияскрипт после установки колеса .

  • Добавьте setuptools консольную точку входа в ваш проект (давайтеназовите это myprojectconfigure). Возможно, вы предпочитаете вместо этого использовать distutils script .

  • Попросите пользователей вашего пакета запускать его сразу после установки пакета(pip install myproject && myprojectconfigure).

  • В конце концов подумайте и о предоставлении myprojectconfigure --uninstall.

...