在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程序。