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

gui*_*cgs 23 python pydev cython python-2.7

我正在使用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
Run Code Online (Sandbox Code Playgroud)

它运行正常......

我的问题是关于pyximport.我有使用pyximport.install()的其他人编写的旧代码.我无法弄清楚它的作用以及为什么我应该使用它,因为我已经自己编译了代码.那么,有人可以用一个非常简单的(对于傻瓜)的方式向我解释pyximport的作用吗?

附加信息:我有一个project1,使用cython.我有一个project2,它引用了project1.

Ada*_*son 17

pyximport是Cython的一部分,它用于代替import某种方式.

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

>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World
Run Code Online (Sandbox Code Playgroud)

直接来自Cython文档

  • @Ryan 它包含在 Cython 中 (3认同)
  • 1)考虑到我已经使用setup.py编译了代码,我不需要使用pyximport,对吧? (2认同)

Rol*_*ier 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)
Run Code Online (Sandbox Code Playgroud)

结果:

Out [5]: 2.5
Run Code Online (Sandbox Code Playgroud)

离开该窗口并转到您的编辑器进行更改hello.pyx

然后回到IPython并输入

In [6]: reload(hello);import hello;hello.mean2(2,3)
Run Code Online (Sandbox Code Playgroud)

您将看到一些有关重新编译的文本。那么新的结果:

Out[6]: 'Mean of 2 and 3 is 2.5'
Run Code Online (Sandbox Code Playgroud)