python - 是否可以预编译(预构建/预安装)Python C/C++ 扩展?

标签 python python-c-extension

我正在处理一个大型 Python 项目,其中包含多个 C/C++ 扩展。目前,每次我想让代码在新机器上运行时,我都必须从存储库下载所有内容,然后运行 ​​python setup.py install 几次,每个扩展一次...和这是假设计算机安装了 C 编译器——如果没有,那是另外一两步。

有什么方法可以预编译所有 C 扩展,这样当我将存储库下载到新机器时,一切都可以立即使用,而无需单独安装所有这些子组件?我知道这可能无法在不同平台上正常工作(或根本无法正常工作?),但假设我在 64 位 Windows 8 机器上预编译了一些东西并想将它安装在另一台 64 位 Windows 8 机器上——是那可能吗?如果是这样,我将如何着手去做?

最佳答案

这是可能的。你问的是 Creating Built Distributions .

您可以创建这样一个内置分布:

python setup.py bdist

您甚至可以选择不同的格式,例如:

python setup.py bdist --format=wininst
  • zip zip 文件 (.zip) [默认]
  • wininst 适用于 Windows 的自解压 ZIP 文件
  • msi Microsoft 安装程序

所有这些您都可以使用标准的 distutils 模块来完成。

如果您想使用更现代的方法并使用setuptools,可以构建Platform Wheels对于 Windows:

python setup.py bdist_wheel

您可以做的最后一件事是为所有扩展创建一个 setup.py 文件。即使您只是 安装源代码分发版,您要做的工作也会少得多。使用构建分发,只需执行一个步骤。

关于python - 是否可以预编译(预构建/预安装)Python C/C++ 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251104/

相关文章:

python - 如何解决 AMD64 Win Python35_d.lib 中缺少 PyModule_Create2 的问题?

python - 将 Python 长整数转换为 C 字符数组

python - PyErr_CheckSignals 没有接收到信号

Python C 扩展 : return PyFloat_FromDouble(double) segfault

python - Python 中的梯形法则

python - 在不更改原始列名的情况下合并 pandas DataFrame

python - 如何在 Python 中创建一组集合?

Python 扩展在处理大型列表时创建无效指针

python - 格式字符串中的可变数字位数

python - 将 Dask 分区写入单个文件