26

我正在使用 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 的作用吗?

附加信息:我有一个项目1,使用 cython。我有一个 project2,它引用了 project1。

4

2 回答 2

19

pyximport 是 Cython 的一部分,它在某种程度上被用来代替import

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

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

直接来自Cython 文档

于 2013-04-02T12:43:12.643 回答
7

您可以使用pyximport自动重新编译和重新加载您的.pyx模块。

删除setup.py已生成的内容,否则您可能会加载该扩展模块。 pyximport不使用setup.py

让我们假设 ahello.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'
于 2018-07-05T13:13:54.260 回答