最近遇到一个问题,在没有安装相对应python版本的机器上运行编译过pythonx.lib的程序时会出现问题。
程序可以正常运行,但是却不能加载python的程序(程序有C++与python交互),在程序里面启动python虚拟机,由它来对python脚本进行解释。
对于没有交互的python脚本是不存在这个问题的,但最好是把这些库都放进来,以防万一。因为python是非编译型的,你不知道他哪个分支会出问题。
程序启动的python虚拟机是在编译和链接时确定的版本为2.6,但是运行该程序的机器上没有安装过python2.6或是安装过其他的版本。如3.0
此时出现的情况是加载不到交互的python文件。文件夹里面的__init__.py文件可以被加载。由此可见python已被正常初始化。但是虚拟机解析不了那些python文件。
问题就出在这里。那些文件是由swig生成的。而且与c++有交互。其中需要由python对应版本的库文件来解析。但是找不到支持的python文件,因此加载不进来。
这都是python的import路径问题
我们的可执行程序放在e:\demo\demo.exe
程序运行的当前路径是最先被搜索的路径。因此,我们需要把对应的python库文件放在这里. e:\demo\python26.dll
然后这里放上我们要读取的所有python脚本文件. e:\demo\pythonscripts
在我们的代码里面需要在sys.path.append('.\\pythonscripts') 否则程序找不到此路径。
然后需要把python26的Lib文件夹放进来,再把DLLs文件夹放进来,这些都是运行python所必须的文件。
这样子这个文件夹起起来是这个样子的
e:\demo\Lib
e:\demo\DLLs
然后在程序 里面加上 sys.path.append('\\Lib')
然后在程序 里面加上 sys.path.append('\\DLLs')
这样以后就没有问题了~完美运行,不再需要安装对应版本的python。而且对原来安装过的python文件也没有任何影响。