将单个SciPy模块编译为* .pyd

时间:2015-04-17 10:01:27

标签: python module scipy portability pyd

我正在开发一个主要使用NumPy和一个SciPy模块的小工具(scipy.optimize.fsolve)。我与其他人分享它的想法是它与Portable Python包装在一起,所以理论上每个人都可以运行它。

整个SciPy包重量很重(约80 mb)。是否有可能只将1个模块编译成* .pyd并将其作为任何其他模块导入,这样我就不必包含我实际上不需要的模块了?

1 个答案:

答案 0 :(得分:2)

如果您只希望使用代码(特别是scipy.optimize.fsolve)分发SciPy代码子集,有几种可能性,

  1. 查看SciPy源代码并仅复制fsolve函数所需的文件。快速浏览一下后,scipy/optimize/optimize.pyscipy/optimize/minpack.pyscipy/optimize/_minpack.so/.pyd(但也许我错过了一对)。
  2. 以更简单的方法,删除scipy安装目录中文件夹未使用部分的文件夹(特别是占用大量空间的部分),包括scipy/weavescipy/sparsescipy/linalg等。< / LI>
  3. scipy.optimize.fsolve周围写一个简单的包装器并用cython将它编译成C代码,这应该会产生一个独立的.pyd / .so
  4. 应该有一个python模块自动执行此操作,例如pyinstaller确实只包含它生成的二进制可执行文件中所需的模块。因此,您需要等效的pyinstaller来生成动态库。