我正在将一个 Python 项目部署到 Pypi,我们称之为foobar
. 我想用一个 shell 命令和一个 IPython 魔术命令来分发它。我使用 Poetry,我的.toml
配置文件的相关部分是:
[tool.poetry.scripts]
foobar = 'foobar.cli:main'
foobar_magic = 'foobar.magic:load_ipython_extension'
将其上传到 TestPypi 并使用 安装后pip
,shell 命令 ( foobar
) 将按预期工作。但是,%load_ext foobar_magic
在 Jupyter Notebook 中执行失败并显示:
ModuleNotFoundError: No module named 'foobar_magic'
根据文档:
你可以把你的扩展模块放在你想要的任何地方,只要它们可以被 Python 的标准导入机制导入。
在同一个笔记本下,我已经验证了这一点!foobar
并且import foobar
两者都有效。我怎样才能foobar_magic
被发现呢?
而且,虽然我还没到那里,但我猜入口点的后缀也是错误的。实际上,我在 之后指定的函数:
将不带参数调用,但该函数load_ipython_extension()
需要一个 IPython 实例。
所以我完全迷失了方向,找不到任何部署 IPython Notebook 扩展的相关文档。
编辑 1. %load_ext foobar.magic
出乎意料地起作用,而且魔法%foobar
不会抱怨这些论点。我不明白为什么,为什么它是%foobar
而不是%foobar_magic
像声明的那样。
编辑 2.这些foobar_magic = ...
东西被忽略或无用。抑制它对 没有任何影响%load_ext foobar.magic
。我认为后一种调用可能没问题。但是不明白发生了什么有点烦人。