我正在使用 IPython 和 Cython。
我正在外部文本编辑器的模块中编辑我的 Cython 函数。
我想导入这些模块并在 IPython 中使用它们,但在导入时使用 IPython 编译它们。
这样做的语法是什么?我不希望我的代码在我的 IPython 笔记本中。
这是一个不寻常的工作流程,但应该可以使某些工作正常进行。首先,为了import能够在您的 IPython 会话中使用,它们必须出现在sys.path. 您可以在该列表中插入新文件夹,如下所示:

您要添加的路径将是放置已编译 Cython 模块的文件夹。无论您使用哪种策略,至少.pyd需要打开已编译 ( ) Cython 模块的路径sys.path才能导入。
其次,您需要一种编译 Cython 模块的方法。如果您使用推荐的方法,您将拥有一个setup.py包含 cython 源的文件并python setup.py build_ext生成编译.pyd文件。每次重新编译 Cython 模块时,您都必须重新启动 IPython 内核。
有替代方案setup.py。其中之一是我的easycython这是一个命令行工具,编译.pyx源进入.pyd,而无需一个setup.py。这个工具是 AFAIK 只被我使用/测试过,所以它可能不起作用,ymmv 等等。每次重新编译你的 Cython 模块时,你仍然需要重新启动你的 IPython 内核。(我在这里提到它只是因为它是我的宝贝之一。)
更好的方法是使用pyximport,因为它将按需编译并支持重新加载:
# This is inside your IPython Notebook
import pyximport
pyximport.install(reload_support=True)
import my_cython_module
Run Code Online (Sandbox Code Playgroud)
您可以重新加载模块
reload(my_cython_module)
Run Code Online (Sandbox Code Playgroud)
您可以尝试巧妙地使用某种逻辑来制作它,以便只需重新运行笔记本即可重新加载或导入:
# 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
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微尝试一下才能找到可行的方法,但对于您的用例来说,有些方法应该是可行的。
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |