cxfreeze将python项目打包成.exe

        最近要把一个python项目打包成.exe迁移到其他无环境的电脑上直接运行,最初打算使用pyinstall,不过有人说pyinstall打包总是缺少某些依赖,所以就在网上寻找方法,选择了使用cxfreeze进行打包。        

        虽然网上关于cxfreeze打包的例子很多,但是大多数都是利用一个python文件进行示范,而对于大项目打包中出现的问题,都是未提及到的,所以今天在此记录一些打包中遇到的问题。

        首先下载cxfreeze,在该网站找到对应的版本进行下载。Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)

        然后根据下面链接中的方法进行python程序打包。利用cx_freeze打包python程序 - 知乎 (zhihu.com)

        打包结束后点击生成的.exe文件,就会出现下面的错误。                

cxfreeze将python项目打包成.exe_第1张图片

        图片中显示打包后的torch文件里,缺少动态链接库或者其依赖。按照指定位置去寻找,该动态链接库存在,所以考虑是缺少依赖库。一些文章表示使用depends软件可以找到缺失的依赖库,但是由于对该软件不熟悉,所以最后也是没有解决。

        不过在原环境的位置下,将.exe拖入,就可以执行,所以该问题是在打包过程中有些依赖并没迁移过去。​​​​​​​​​​​​​​

        该环境是anaconda虚拟环境,安装过程中使用conda和pip,看到某些文章说使用混合指令安装的包一起打包,容易出错,也有的文章说打包的时候conda 和torch不兼容。为了解决问题,尝试着在本地环境上只使用pip安装该项目所需的包,最后再利用cxfreeze打包成.exe。不过在安装的过程中,出现了问题,发现有些安装包只能使用conda指令进行安装,所以该方法并未成功。

        接下来的解决方案就是新建了一个虚拟环境,逐个安装环境查看是因为缺失什么安装包,出错的原因是什么,最后发现在打包的过程中,某些安装包文件迁移过程中总会漏掉一些,就比如在原环境torch文件夹下的.py文件转化为.pyc后,并没有全部都迁移到打包后的lib文件夹下的torch文件夹里,所以根据提示出错的文件逐个排查,复制粘贴过去。

        由于上面的启发,我猜想上述torch中缺少依赖的问题,是否也是因为某些依赖没打包过去。我找到了原环境中依赖的位置,在Library\bin里,然后尝试着将这些依赖复制粘贴到打包后的lib文件夹下。

        完成上述步骤后,再点击.exe文件就可以正常运行了。来来回回查找,不断排除,经过几天后终于完成了。总而言之,在利用cxfreeze将python项目打包成.exe文件后,运行.exe文件出现错误时,大概率是因为原环境中的某些东西并没正常的被打包,需要手动复制粘贴过去。

        至此,该篇文章结束。由于该项目打包成功后有其他事情耽误,所以隔了几天才写的这篇文章,因此可能会有其他问题并没有提及到,以后想到的话继续补充。

 

 

 

 

你可能感兴趣的:(python)