Gleb Asked:2020-10-04 15:29:05 +0800 CST2020-10-04 15:29:05 +0800 CST 2020-10-04 15:29:05 +0800 CST 如何使用python制作c++模块 772 How to make a module for c++ using python 3.6.1 也就是用python写一些模块,用它做点什么,然后通过c++运行,例如 print("Hello, world"),当我们将这个库导入c++时,它会输出Hello, world c++ 1 个回答 Voted Best Answer jfs 2020-10-05T18:10:42+08:002020-10-05T18:10:42+08:00 您可以将 Python 代码作为外部命令调用。例如: #include <stdlib.h> int main() { return system("python -mwebbrowser http://example.com"); } 要在 C++ 中执行 Python 代码,您可以嵌入 Python 解释器: #include <Python.h> int main() { Py_Initialize(); PyRun_SimpleString("print('hello world')"); return Py_FinalizeEx() < 0; } 要编译程序,您可以Makefile使用: NAME := embed-python-interpreter PYTHON_VERSION := python-3.6 $(NAME): $(NAME).cc $(CXX) `pkg-config --cflags ${PYTHON_VERSION}` $< -o $@ `pkg-config --libs ${PYTHON_VERSION}` 您还可以使用cffi、cython嵌入 Python 。 可以将 Python 代码的子集编译成 C。例如,使用translate.py可以将 RPython 转换为 C的 Pypy程序。 通常,相反,C/C++ 代码用于创建 Python 扩展或直接使用 ctypes,从 Python 调用 cffi C 代码: >>> import ctypes >>> libc = ctypes.CDLL(None) >>> libc.printf(b"abc\n") abc 4 这会从 CPython 解释器中包含的 libc 调用printf()C 函数。abc这是 C 标准输出的输出。此 Python REPL 打印(打印 4 个字节)4的返回值。printf()以下是更复杂的示例: 在 Linux 上从( )调用clock_gettime()C 函数<time.h>-lrt FindFirstFileW()来自 Windows 上 kernel32的调用,以实现os.path.islink() 模拟结点支持。 下面是一个使用 OpenSSL API 从 x509 证书中获取序列号的例子,这表明在调用很多函数时,使用更高级别的库比直接使用更方便ctypes。 Cython可方便地将 C/C++ 代码与 Python 集成或显着加速 Python 代码。clipped_cumsum(),在 Cython 中实现,比它的纯 Python 对应物快 100 倍,有时甚至比使用 numpy、pandas 的实现快一个数量级,例如:rotT()、max_rolling_sum()。Cython 允许您释放 GIL,因此可以使用多线程加速纯计算,例如:b2a_bin(). Cython 可以在流行库的源代码中找到,例如lxml, numpy, scipy, pandas, scikit-learn.
您可以将 Python 代码作为外部命令调用。例如:
要在 C++ 中执行 Python 代码,您可以嵌入 Python 解释器:
要编译程序,您可以
Makefile
使用:您还可以使用cffi、cython嵌入 Python 。
可以将 Python 代码的子集编译成 C。例如,使用
translate.py
可以将 RPython 转换为 C的 Pypy程序。通常,相反,C/C++ 代码用于创建 Python 扩展或直接使用 ctypes,从 Python 调用 cffi C 代码:
这会从 CPython 解释器中包含的 libc 调用
printf()
C 函数。abc
这是 C 标准输出的输出。此 Python REPL 打印(打印 4 个字节)4
的返回值。printf()
以下是更复杂的示例:clock_gettime()
C 函数<time.h>
-lrt
FindFirstFileW()
来自 Windows 上 kernel32的调用,以实现os.path.islink() 模拟结点支持。下面是一个使用 OpenSSL API 从 x509 证书中获取序列号的例子,这表明在调用很多函数时,使用更高级别的库比直接使用更方便
ctypes
。Cython可方便地将 C/C++ 代码与 Python 集成或显着加速 Python 代码。
clipped_cumsum()
,在 Cython 中实现,比它的纯 Python 对应物快 100 倍,有时甚至比使用 numpy、pandas 的实现快一个数量级,例如:rotT()
、max_rolling_sum()
。Cython 允许您释放 GIL,因此可以使用多线程加速纯计算,例如:b2a_bin()
. Cython 可以在流行库的源代码中找到,例如lxml
,numpy
,scipy
,pandas
,scikit-learn
.