如何将Cython模块导入IPython笔记本并编译
我正在使用IPython和Cython 我正在外部文本编辑器的模块中编辑Cython函数 我想导入这些模块并在IPython中使用它们,但在导入时使用IPython编译它们如何将Cython模块导入IPython笔记本并编译,ipython,cython,Ipython,Cython,我正在使用IPython和Cython 我正在外部文本编辑器的模块中编辑Cython函数 我想导入这些模块并在IPython中使用它们,但在导入时使用IPython编译它们 这样做的语法是什么?我不希望我的代码出现在IPython笔记本中。这是一个不寻常的工作流,但应该可以让某些东西正常工作。首先,对于要在IPython会话中导入的内容,它们必须出现在sys.path中。您可以按如下方式在该列表中插入新文件夹: 您要添加的路径将是放置已编译Cython模块的文件夹。无论您接下来使用哪种策略,您
这样做的语法是什么?我不希望我的代码出现在IPython笔记本中。这是一个不寻常的工作流,但应该可以让某些东西正常工作。首先,对于要在IPython会话中导入的内容,它们必须出现在
sys.path
中。您可以按如下方式在该列表中插入新文件夹:
您要添加的路径将是放置已编译Cython模块的文件夹。无论您接下来使用哪种策略,您编译的(.pyd
)Cython模块的路径至少需要在sys.path
上才能导入
其次,您需要一种编译Cython模块的方法。如果您使用的是推荐的方法,那么将有一个包含cython源代码的setup.py
文件和python setup.py build\u ext
来生成编译后的.pyd
文件。每次重新编译Cython模块时,都必须重新启动IPython内核
除了setup.py
,还有其他选择。其中之一是my,它是一个命令行工具,可以将.pyx
源代码编译成.pyd
,而无需设置.py
。此工具仅由我使用/测试,因此它可能无法工作,ymmv等。每次重新编译Cython模块时,您仍然必须重新启动IPython内核。(我在这里提到它只是因为它是我的一个孩子。)
更好的方法是使用pyximport
,因为它将按需编译,并且具有重载支持:
# This is inside your IPython Notebook
import pyximport
pyximport.install(reload_support=True)
import my_cython_module
您可以使用重新加载模块
reload(my_cython_module)
您可以尝试巧妙地使用某种逻辑,以便只需重新运行笔记本即可重新加载或导入:
# Speculative code: I have not tried this!
# This is inside your IPython Notebook
import pyximport
pyximport.install(reload_support=True)
if 'my_cython_module' in dir(): # Maybe sys.modules is better?
reload(my_cython_module)
else:
import my_cython_module
您可能需要花点时间来寻找一些有效的方法,但对于您的用例来说,这些方法应该是可行的。即使使用
pyximport
方法,我们也需要修改sys.path
吗?