简化Python解释环境的安装
来源:互联网 发布:成都麻将打5元算法图片 编辑:程序博客网 时间:2024/04/29 01:12
问题描述
在C++和Python混合编程中,在软件发布的时候需要将python的解释器打包到安装程序中,为了提高用户体验,我们需要让用户感觉不到python的安装,如果用户已经安装有python的环境,我们也要保证不影响现有的系统。
解决方案
在Python2.5以后,python支持从zip文件中读取python脚本文件,支持读取py,pyc,pyo,不支持读取pyd,因此
我们可以将python的标准库编译以后打包到一个zip文件中,在C++中调用python脚本的时候,将zip文件加入到sys.path的搜索路径中来完成。
- 将python的标准库的脚本文件目录C:/Python25/Lib中的脚本文件copy到一个指定的目录,然后我们删除掉一些不用的库文件比如msilib,complier等(此步不熟悉可以不要省去删除多余文件)。
- 将脚本编译为优化后的文件 python -O -m compileall destdir,然后删除所有冗余的py和pyc, del /S /Q "%1/*.pyc" "%1/*.py " ( %1 表示目标文件夹 )
- 将文件压缩成zip格式 "%WINRAR_DIR%/WinRar" a -r -m5 -tk "python25.zip" "*"
- 我们自己的py文件可以按照同样的方法压缩到src.zip中
- 将python的pyd文件(Windows默认是C:/Python25/DLLs)复制到目标文件夹python25_dll中
- 将python25.dll复制到应用程序的搜索路径中
- 在C++中调用Python的C API设置python库的搜索路径,这样我们就可以就可以通过Python C API进行混合语言的编程,在部署的时候不需要单独按照python安装程序
char buffer[1024] = { 0 };
Py_Initialize();
PyRun_SimpleString( "import sys" );
//获取当前路径,如果是GUI程序有可能会改变程序的当前工作目录,如果是服务器
//程序一般当前的工作目录就是二进制文件所在的目录
#ifdef WIN32
char achCwdBuf[PATH_MAX] = {0};
if( NULL != GetModuleFileName(NULL, achCwdBuf, PATH_MAX) )
#else
if( NULL != ACE_OS::getcwd(achCwdBuf, PATH_MAX) )
#endif // end of ifdef WIN32
{
string strCwd = achCwdBuf;
strCwd = strCwd.substr( 0, strCwd.find_last_of( "///" ) );
string strStdZip = strCwd;
strStdZip += "//python25.zip";
sprintf( buffer, "sys.path += ['.', r'%s', r'%s//python25_dlls', r'%s//src.zip', r'%s//python_script']",
strStdZip.c_str(), strCwd.c_str(), strCwd.c_str() );
PyRun_SimpleString( buffer );
}
- 简化Python解释环境的安装
- Python环境的安装
- Python解释器-Windows下的安装
- python解析:Java环境配置简化版
- 安装python解释器
- selenium + python的环境安装
- python安装环境的配置
- 搭建Python的Eclipse开发环境之配置解释器
- nginx的windows环境下安装与参数解释
- win7搭建Python开发环境(下篇--安装pip和ipython解释器)
- win7搭建Python开发环境(下篇--安装pip和ipython解释器)
- 获取正在执行的python解释器安装目录
- VPN的解释 - 简化的VPN的基础知识
- 借助apktool.jar工具,使用python代码简化批量反编译apk安装包的简单实现
- 简化激活Tensorflow环境的方法
- python 关于@的解释
- python self的解释
- python enumerate的解释
- 利用VS2005进行dump文件调试
- Iframe 滚动条
- win7小工具之屏幕录像(问题步骤记录器)
- ASP.net弹出消息对话框的方法
- 针对上网本和便携式设备的第一批MeeGo构架
- 简化Python解释环境的安装
- IFRAME滚动条的样式
- 2010-4-20
- e32keys.h
- win7错误报告发送之无打扰模式
- HTTP协议的作用原理 [ZT]
- 指向指针的指针 **
- Struts2 所有插件简介--目前到达40余种
- MTK 6235平台手写字体TTF字体实现