打包Python项目及其关联的IPython magic扩展
我正在为Pypi部署一个Python项目,我们称之为打包Python项目及其关联的IPython magic扩展,python,pip,jupyter-notebook,ipython-magic,python-poetry,Python,Pip,Jupyter Notebook,Ipython Magic,Python Poetry,我正在为Pypi部署一个Python项目,我们称之为foobar。我想用shell命令和IPython magic命令来分发它。我使用诗歌,我的.toml配置文件的相关部分是: [tool.poetry.scripts] foobar = 'foobar.cli:main' foobar_magic = 'foobar.magic:load_ipython_extension' 将其上载到TestPypi并使用pip安装后,shell命令(foobar)将按预期工作。但是,在Jup
foobar
。我想用shell命令和IPython magic命令来分发它。我使用诗歌,我的.toml
配置文件的相关部分是:
[tool.poetry.scripts]
foobar = 'foobar.cli:main'
foobar_magic = 'foobar.magic:load_ipython_extension'
将其上载到TestPypi并使用pip
安装后,shell命令(foobar
)将按预期工作。但是,在Jupyter笔记本中执行%load\u ext foobar\u magic
失败,原因是:
ModuleNotFoundError: No module named 'foobar_magic'
根据报告:
您可以将扩展模块放在任何您想要的地方,只要它们可以通过Python的标准导入机制导入
在同一个笔记本下,我验证了!foobar
和导入foobar
都可以工作。我怎样才能让foobar\u magic
也被找到
此外,虽然我还不在那里,但我猜入口点的后缀也错了。实际上,我在:
之后指定的函数将被调用,而不带任何参数,但函数load\u ipython\u extension()
需要一个ipython实例
所以我觉得完全迷路了,找不到任何部署IPython笔记本扩展的相关文档
编辑1。
%load\u ext foobar.magic
意外工作,并且magic%foobar
不会抱怨参数。我不明白为什么,为什么它是%foobar
,而不是%foobar\u magic
编辑2。被忽略或无用的
foobar\u magic=…
内容。禁用它不会对%load\u ext foobar.magic
产生任何影响。我认为后一种调用可能还可以。但不明白发生了什么有点烦人。我终于找到了解决办法:
.toml
的行foobar\u magic=…
foobar/magic.py
的内容移动到foobar/\uuuu init\uuuuuu.py
(最初为空),由以下两行保护:
import sys
if "ipykernel" in sys.modules:
# magic stuff
%load_ext foobar