我知道Python提供了API,因此您可以在C代码中调用Python解释器,但是我想要的却是相反的。
我的程序需要使用一些C API,所以代码必须用C编写。但是我也想用Python打包程序。这意味着我想在Python中调用这些C函数或可执行文件。那可能吗?
如果我希望C代码成为一个库,这意味着我将它与Python #include中的*.o可能的链接一起使用,该怎么做?那可能吗?如果我将C代码写入可执行文件,这意味着它成为命令,是否可以直接在Python中调用它?
#include
*.o
另外,我听说可以编译Python代码,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?
我想在python中调用这些C函数或可执行文件。那可能吗。
是的,您可以编写可以作为模块导入到Python中的C代码。Python调用这些 扩展模块 。您可以直接从Python调用它,例如文档中的示例:
Python代码
import example result = example.do_something()
C代码
static PyObject * example(PyObject *self) { // do something return Py_BuildValue("i", result); }
如果我想让C代码成为一个库,这意味着我将它与#include以及* .o的链接一起使用,很可能在python中使用,怎么做或有可能。
您可以将其构建为共享库 .dll* 或 .so,* 还可以研究使用distutils分发模块。
如果我将C代码写入可执行文件,这意味着它成为命令,是否可以直接在python中调用它?
如果您编写一个 * .exe, 那么您将执行相反的操作(从C调用Python)。选择的方法(exe与共享库)取决于您是否要使用 “带有某些Python的C程序” 或 “带有某些C的Python程序” 。
另外,我听说可以编译python代码,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?
运行时,Python读取 .py* 文件并编译为 .pyc 字节码 文件。然后,字节码在Python虚拟机中运行。这意味着 “第二次执行同一文件的速度更快,因为可以避免从源代码到字节码的重新编译。” (来自Python词汇表)因此,如果您尚未编辑 .py* 文件,它将运行 .pyc 。您可以分发 ** .pyc** 文件,而不分发 .py** 文件,但是这些文件未加密,可以进行反向工程。