Установка расширений Jupyter - автоматическая установка и включение из setup.py - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь автоматизировать установку и включение расширения Jupyter, так что пользователю не нужно вводить команды:

jupyter nbextension install --user <my_fancy_module>
jupyter nbextension enable <the entry point> --user

Как описано в документации Jupyter Notebook , можно указать в setup.py:

import setuptools

setuptools.setup(
    name="MyFancyModule",
    ...
    include_package_data=True,
    data_files=[
        # like `jupyter nbextension install --sys-prefix`
        ("share/jupyter/nbextensions/my_fancy_module", [
            "my_fancy_module/static/index.js",
        ]),
        # like `jupyter nbextension enable --sys-prefix`
        ("etc/jupyter/nbconfig/notebook.d", [
            "jupyter-config/nbconfig/notebook.d/my_fancy_module.json"
        ])
    ],
    ...
    zip_safe=False
)

Однако, когда я пытаюсь запустить pip install . в каталоге пакета, установка заканчивается, но my_fancy_module не устанавливается. Запуск:

jupyter nbextension install --user <my_fancy_module>

работает хорошо, так как он правильно копирует весь <my_fancy_module> из моего каталога пакета в ~/Library/Jupyter/nbextensions/.

Согласно Документация Python по установке дополнительных файлов :

data_files указывает последовательность (каталог, файлы) (...) Каждая пара (каталог, файлы) в последовательности указывает каталог установки и файлы для установки в нем. (...) Каталог должен быть относительным путем . Он интерпретируется относительно префикса установки (Python sys.prefix для системных установок; site.USER_BASE для пользовательских установок).

My site.USER_BASE указывает на ~/.local.

Мой вопрос:

Как мне установить и включить my_fancy_package изнутри setup.py, чтобы я получил тот же результат, как если бы я выполнил две команды, упомянутые в начале? Если речь идет об указании data_files - какой directory следует указать tere для успешной установки и включения my_fancy_module?

Я пытался:

"/Library/Jupyter/nbextensions/my_fancy_module", "../Library/Jupyter/nbextensions/my_fancy_module", "share/jupyter/nbextensions/my_fancy_module"

но ни один из них не работал.

1 Ответ

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

Похоже, data_files пытается принять абсолютные пути как пункт назначения , но если вы запускаете setup.py с флагом --no-binary, то есть pip install <my_package> --no-binary :all":, это работает нормально.

from os import path
setuptools.setup(
    ...
    data_files=[((path.expanduser('~') + '/Library/Jupyter/nbextensions/my_fancy_module', 
                  ['my_fancy_module/static/index.js']))]
    ...
)
...