什么是 pyximport,我应该如何使用它?
Posted
技术标签:
【中文标题】什么是 pyximport,我应该如何使用它?【英文标题】:What is pyximport and how should I use it? 【发布时间】:2013-03-23 18:06:31 【问题描述】:我正在使用 cython 为数学模型生成更快的代码。 我很难编译代码,但不知何故我设法使用 .bat:
setlocal EnableDelayedExpansion
CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release
set DISTUTILS_USE_SDK=1
C:\Python27\python.exe C:\gcsilve\trunk\myproject\myproject\cythonsetup.py build_ext --inplace
PAUSE
运行正常...
我的问题是关于 pyximport。我有其他人使用 pyximport.install() 编写的旧代码。我无法弄清楚它的作用以及为什么要使用它,因为我已经在自己编译代码了。那么,有人可以用一种非常简单(对于傻瓜)的方式向我解释 pyximport 的作用吗?
附加信息: 我有一个project1,使用cython。 我有一个 project2,它引用了 project1。
【问题讨论】:
【参考方案1】:pyximport 是 Cython 的一部分,它在某种程度上代替了import
。
如果您的模块不需要任何额外的 C 库或特殊的构建设置,那么您可以使用 pyximport 模块在导入时直接加载 .pyx 文件,而无需编写 setup.py 文件。可以这样使用:
>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World
直接来自Cython documentation
【讨论】:
1) 考虑到我已经使用 setup.py 编译了代码,我不需要使用 pyximport,对吧? 是的,没错。那是你要找的吗?如果我的回答是这样,你总是可以接受:),否则请告诉我。 我正在尝试安装 pyximport,但找不到任何东西,您是如何安装的?谢谢 @Ryan 它包含在 Cython 中【参考方案2】:您可以使用pyximport
自动重新编译和重新加载您的.pyx
模块。
删除setup.py
生成的内容,否则您可能会加载该扩展模块。
pyximport
不使用setup.py
。
让我们假设一个hello.pyx
带有一个函数mean2
。
启动 IPython。
In [1]: import pyximport
In [2]: pyximport.install(reload_support=True)
In [3]: from importlib import reload
In [4]: import hello
In [5]: hello.mean2(2,3)
结果:
Out [5]: 2.5
离开该窗口并转到您的编辑器以更改hello.pyx
。
然后回到 IPython 并输入
In [6]: reload(hello);import hello;hello.mean2(2,3)
您将看到一些关于重新编译的文本。 那么新的结果:
Out[6]: 'Mean of 2 and 3 is 2.5'
【讨论】:
以上是关于什么是 pyximport,我应该如何使用它?的主要内容,如果未能解决你的问题,请参考以下文章
Cython:pyximport:在 pyximport.install 中启用分析
使用 pyximport reload_support 重新加载 Cython 不起作用