怎样在python程序中嵌入C程序片段?
在c中嵌入python有一些步骤。
安装python程序,以便可以使用python头文件和库。
添加"Python.h"头文件链接到我们编写的源文件,并将其链接到"python**。lib"库(需要明确这个库是静态库还是导出库)。
掌握并理解一些pythonC语言API,用于我们的C程序。
一些常用的CAPI函数
在理解以下函数之前,有必要知道**PyObject***指针。python中几乎所有的对象都由这个指针指示。
py_Initialize()ampampPy_Finalize()
在调用任何pythonc函数之前需要调用的函数初始化"用于初始化python模块,大概是加载初始化加载dll。相应地,使用"最终确定"在使用python模块后释放它。
Pyimport_importModule()
用于加载python模块,这是一个通用的python文件。这里需要注意的是,当模块被加载时,模块中所有的可执行语句都会被执行。包括import语句和函数体外部的所有语句。
PyObject_GetAttrString()
返回模块中的函数。
Py_BuildValue()
创建参数元组,通常用这个函数创建一个元组,然后这个元组作为参数传递给python中的函数。
Pyeval_CallObject()
调用函数并传递由"Py_BuildValue"作为被调用函数的参数。
源代码示例
下面的例子是调用PythonC代码中的s函数,传递参数并获取返回值。
Test.cpp代码
#包含ltiostreamgt
#包含ltPython.hgt
使用命名空间标准
intmain(intargc,char*argv[])
{
Py_Initialize()//初始化
PyObject*pModule为空
PyObject*pFuncNULL
PyObject*pParam空
PyObject*预设为空
constchar*pBufferNULL
intiBufferSize0
p模块Pyimport_importModule(";test_python";)
如果(!p模块)
{
coutltlt获取模块失败!ltltendl
退出(0)
}
pfuncpyobject_GetAttrString(pmodule,main)
如果(!pFunc)
{
coutltltgetfunc失败!ltltendl
coutltltint(pFunc)ltlt
python如何打包成exe文件?
在之前的文章《《让你的代码更好的交付,使用Python实现模块打包发布》》中,分享了测试开发工程师在交付时,使用车轮库将交付模块封装成.whl文件,达到了提高交付部署效率的目的。同时,采用统一的发布,也有助于提高测试开发的标准化程度。
除了发布模块可以打包成。whl。
格式化文件,对于一些小型的测试工具发布场景,分享一种更适合的发布——打包成可执行文件。exe程序,让用户即使在没有Python的环境下也依然可以直接运行,进一步降低使用成本,提高使用效率。
接下来,让我们分享如何使用PyInstaller库将发布模块打包成一个。exe格式文件。
建议通过pip安装PyInstaller,否则可能会报错其他依赖库缺失,需要手动逐个安装。
Pip安装PyInstallerPyInstaller使用下面这个简单的代码示例,其中导入了Python内置的library-Time模块和第三方library-csv模块,这样每次运行时都可以将固定数据写入新生成的csv文件中。
在模块目录下执行以下命令,执行日志如下:
您可以在其中看到。uildwritefiles.exe文件已经在当前目录下生成。
当我们执行WriteFiles.exe时,我们可以发现WriteFile_1550935956.csv文件已经被添加到当前目录中。
PyInstaller-F常用参数说明:打包单个文件,生成的结果是一个。exe格式文件。-D:打包多个文件,生成的结果是一个目录,包括第三方依赖,资源,。exe文件等。适合用框架的形式写工具模块,带默认参数。-c:使用Windows控制台子系统来执行、显示命令行窗口和默认参数。-w:由Windows子系统执行,程序启动时不会打开命令行。这个参数在编写GUI程序时很有用。-p:指定一个额外的导入路径,类似于PYTHONPATH,多个目录可以使用路径分隔符(Windows用分号,Linux用冒号)。–-add-data:打包附加资源,多个资源可以使用路径分隔符(Windows用分号,Linux用冒号)。––add-binary:打包多余的代码,多个代码可以使用路径分隔符(Windows用分号,Linux用冒号)。同时,将添加–-add-binary添加文件的引用文件。-i:添加图标的图标。exe文件。-n:编辑的文件名。exe和。规格。我们尝试使用-F,-n参数只生成一个。exe文件,文件名为Toutiao。我们执行以下命令并运行日志,如下所示:
pyinstaller-f-nToutiao.exe其中distToutiao.exe文件生成在当前目录下,目录结构如下。
除了PyInstaller模块,还可以将模块打包成。exe格式,还可以了解pyexe模块,也可以达到同样的打包效果,所以我赢了这里不单独介绍了。
如果对你有帮助,欢迎评论留言。