什么是pyximport以及我应该如何使用它?

28

我正在使用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是做什么的吗?

额外信息: 我有一个使用Cython的project1。 我有一个引用project1的project2。

2个回答

22

pyximport是Cython的一部分,它可以代替import的功能。

如果您的模块不需要任何额外的C库或特殊的构建设置,则可以使用pyximport模块,在导入时直接加载.pyx文件,而无需编写setup.py文件。使用方法如下:

>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World

来自Cython文档直接提取


2
考虑到我已经使用setup.py编译了代码,我不需要使用pyximport,对吗? - guilhermecgs
是的,没错。这就是你想要的吗?如果我的回答对了,你可以随时接受它 :),否则请告诉我。 - Adam Barthelson
我正在尝试安装 pyximport,但是找不到任何东西,您是如何安装的?谢谢。 - Ryan
3
@Ryan,这已经包含在Cython中。 - user2682863

9
你可以使用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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接