在Ubuntu系统上使用GCC编译Python程序并不是一个常见的做法,因为Python是一种解释型语言,通常不需要编译。但是,如果你想要将Python代码转换为C代码,然后再编译成可执行文件,你可以使用一些工具来实现这一目的。
以下是使用gcc和cffi或cython来编译Python程序的步骤:
安装CFFI库:
pip install cffi 编写Python代码并保存为example.py:
# example.py def add(a, b): return a + b if __name__ == "__main__": print(add(1, 2)) 创建一个C文件example.c,用于调用Python函数:
// example.c #include <Python.h> int main(int argc, char *argv[]) { Py_Initialize(); PyRun_SimpleString("import sys\n" "sys.path.append('./')\n" "from example import add\n"); PyObject *pModule = PyImport_ImportModule("example"); PyObject *pFunc = PyObject_GetAttrString(pModule, "add"); PyObject *pArgs = PyTuple_Pack(2, PyLong_FromLong(1), PyLong_FromLong(2)); PyObject *pValue = PyObject_CallObject(pFunc, pArgs); printf("Result of call: %ld\n", PyLong_AsLong(pValue)); Py_DECREF(pValue); Py_DECREF(pFunc); Py_DECREF(pModule); Py_Finalize(); return 0; } 使用gcc编译C文件:
gcc -I/usr/include/python3.8 -lpython3.8 example.c -o example 注意:你需要根据你的Python版本调整-I和-l选项中的路径和库名。
运行生成的可执行文件:
./example 安装Cython:
pip install cython 编写Python代码并保存为example.pyx:
# example.pyx def add(int a, int b): return a + b 创建一个setup.py文件来编译Cython代码:
from setuptools import setup from Cython.Build import cythonize setup( ext_modules=cythonize("example.pyx") ) 使用python setup.py build_ext --inplace编译Cython代码:
python setup.py build_ext --inplace 运行生成的可执行文件:
python example.py 请注意,Cython编译后的代码实际上是C代码,它会被编译成Python扩展模块,然后可以像普通的Python模块一样导入和使用。如果你想要一个独立的可执行文件,你可能需要使用PyInstaller或cx_Freeze等工具来打包你的Python程序。