前面的文章介绍了如何用pyinstaller打包python项目。然而打包好的软件在有些电脑(配置了各种环境的电脑)上能运行,有些电脑不能运行。首先介绍一下我的项目:python3.6+pyqt4+python-opencv+自定义dll。前面三个都没有问题,就是因为带了自带的dll,无法运行。下面,将介绍一下我遇到了哪些问题,又如何解决这些问题。
1.软件找不到dll,具体错误如下图。显示找不到根目录底下的dll。这是因为dll所依赖的库没有打包完整,所以无法导入。我使用的是Dependency Walker查询dll的依赖。
下载地址为:http://www.dependencywalker.com/depends22_x64.zip
使用教程为:https://blog.youkuaiyun.com/swort_177/article/details/5426848
使用软件后,可以看到dll所依赖的几个dll。 其中Lasso.dll是我自己生成的dll,而下面的几个dll是它的依赖。这时你可以发现有几个dll,pyinstaller已经帮我们打包到dist中。我的是opencv_world320.dll还没有被打包进去。所以去D:\opencv\opencv3.2\build\x64\vc14\bin下面将dll复制进dist里面。其他的,大家可以根据自己项目所缺的添加。Dependency Walker会告诉我们所缺的dll在我们计算机中的地址,右击下图中的dll即可。
2.dll的依赖补全后,可以成功导入。但是调用dll中函数的时候,还是会出错。我的是软件直接崩了(这里没有加异常捕获)。这里的问题是dll执行库的问题,我的dll是C++代码打包而成的,用的是vs2015,所以,电脑还缺一个vs2015的C++库。这里有两个方法,你可以直接安装vs2015,对于开发人员来说,vs2015基本都有。如果不想装vs2015,就装Visual C++ Redistributable for Visual Studio 2015,这是微软提供的官方库。大家可以根据自己打包的软件找相应的包,比如用vs2013打包的dll,就装Visual C++ Redistributable for Visual Studio 2013。
下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145
解决这两个问题后,我的软件可以在其他win10电脑上运行了。至于win7的还没有尝试,可以等我后面更新的博客。