我需要更高的性能来运行我的神经网络,所以我认为用 cython 构建它是个好主意。我正在这样构建我的代码:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("my_code.pyx")
)
但是它会构建我使用的外部 python 文件吗?就我而言,就像 pybrain、skimage 和 PIL。 如果没有,如何强制 cython 构建它们。
最佳答案
不,外部 python 文件不会被 cythonized 和编译,除非你专门将它们作为扩展添加到你的 setup.py
中。据我所知,没有简单的方法可以做到这一点。
这意味着所有对外部文件的调用都将在“Python 空间”中处理,因此无法充分发挥 Cython 的潜力。例如,所有对外部文件的调用都将进行类型检查,这会浪费很多时间。如果您使用 cython -a yourfile.pyx
对文件进行 cython 化并查看创建的 C 代码,则可以看到这一点。黄色越多,您的代码就越python。
您有以下选择:
- 查找提供 Cython 或 C 级访问权限的库/包。不幸的是,您使用 Cython 找到好的(或根本没有)的机会很低,并且为 C 库构建包装器需要大量工作。请注意,本身用 C 实现的包(例如 numpy)已经相当快了。我不知道这对您的相关包裹有何影响。 pybrains 乍一看似乎是纯 python。
- 获取您要使用的包的源代码,并使用 Cython 自行编译它们。这可能需要大量工作,不值得花时间。
- 使用像 lineprofiler / kernprof 这样的分析器找到瓶颈(这应该始终是优化的第一步)并尝试仅对运行时瓶颈进行 cythonize。
我个人会选择选项 3,因为选项 1 和 2 都可能需要您这边做大量工作,结果有问题。
关于python - 如何使用 pybrain 等外部 python 库在 cython 中编译我的 python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248017/