3

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

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

4

1 回答 1

2

如果您只想用您的代码(尤其是scipy.optimize.fsolve)分发 SciPy 代码的子集,有几种可能性,

  1. 查看 SciPy 源代码并仅复制该fsolve函数所需的文件。快速浏览后,至少,,,scipy/optimize/optimize.py(但也许我错过了几个)。scipy/optimize/minpack.pyscipy/optimize/_minpack.so/.pyd
  2. 在更简单的方法中,逐个文件夹删除 scipy 安装目录中未使用的部分(尤其是那些占用大量空间的部分),包括scipy/weave,scipy/sparsescipy/linalg
  3. 围绕 编写一个简单的包装器 scipy.optimize.fsolve并使用 cython 将其编译为 C 代码,这应该会生成一个独立的 .pyd/.so

应该有一个 python 模块来自动执行此操作,例如pyinstaller在它生成的二进制可执行文件中只包含所需的模块。所以你需要一个等效的pyinstaller生成动态库。

于 2015-04-17T12:08:14.563 回答