安装Jupyter Extensions-从setup.py自动安装并启用

时间:2019-09-29 16:00:59

标签: python pip jupyter-notebook jupyter setuptools

我正在尝试自动安装和启用Jupyter Extension,以使用户不需要键入命令:

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

Jupyter Notebook documentation中所述,可以在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 documentation on Installing Additional Files

  

data_files指定(目录,文件)(...)的序列。序列中的每个(目录,文件)对都指定安装目录和要在此处安装的文件。 (...)目录应该是相对路径。相对于安装前缀(对于系统安装,是Python的sys.prefix;对于用户安装,是site.USER_BASE)。

我的site.USER_BASE指向~/.local

我的问题是:

如何从my_fancy_package内部安装和启用setup.py,使最终结果与执行开头提到的两个命令的结果相同?如果这是关于指定data_files的-我应该指定什么directory才能成功安装并启用my_fancy_module

我尝试过:

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

但没有一个起作用。

1 个答案:

答案 0 :(得分:0)

似乎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']))]
    ...
)