❤❤❤❤❤
    
    本人计算机小白,之前从未接触过软件开发的工作,会一点点Python也仅作数据分析用途。
   
    这次是第一次用Python写了一个自动化生成PDF报告的代码。
    
    由于自动生成报告只是一个小功能,总工要求我把它转为.o或.dll方便调用。
    
    百度后发现,我需要先把它转为C语言,再转为.o文件,其中涉及了大量操作,实在太麻烦。
    
    所以我想直接转为执行文件,再由前端用接口直接调用。
   
在把Python代码转为执行文件的过程中遇到了很多坑,百度了很多方法,终得以解决。
由于第一次写博文,在操作的时候截图较少,用了些别人的图。
算一篇小总结吧。参考资料均已标明出处。
使用版本号:Python3.8
❤❤❤❤❤
    
     1、Python转执行文件的包
    
   
一个Pyinstaller就够了,亲测有效。
pip install pyinstaller
    
     参考资料:
     
      https://blog.csdn.net/ruoyunliufeng/article/details/72652075
     
    
   
    
     2、报错matplotlib pep425tags
    
   
    
     解决方法:
    
   
①将Matplotlib卸载
pip uninstall matplotlib
②查看pip支持版本
pip debug --verbose
    如图:
    
     
   
    ③到这个网站:
    
     
      https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
     
    
    
    下载支持版本的whl文件,然后安装,并将在下载的.whl文件放在Python的Scripts目录下,如图:
    
    
    
    ④下载这个Matplotlib包
   
pip install matplotlib-3.1.1-cp37-cp37m-win_amd64.whl
成功后可以重新打包了。
    
     参考资料:
     
     [1]:
     
      https://blog.csdn.net/weixin_42769131/article/details/109955085
     
     
     [2]:
     
      https://blog.csdn.net/weixin_39702400/article/details/109950231
     
     
     [3]:
     
      https://lanzao.blog.csdn.net/article/details/103881372
     
    
   
    
     3、报错IndexError: tuple index out of range
    
   
    
     解决方法:
    
   
    ①到GitHub上下载:
    
     https://github.com/pyinstaller/pyinstaller
    
    
     
   
    ②下载到本地以后解压,将里面的{PyInstaller文件夹}复制到C:\Users\Y\AppData\Local\Programs\Python\Python36\Lib\site-packages目录下(每个人目录不太一样,报错信息中可以找到此目录),替换原来的文件夹。
    
    
    
    成功后可以重新打包了。
   
    
     参考资料:
     
      https://blog.csdn.net/qq_35614920/article/details/77096238
     
    
   
    
     4、报错numpy.core.multiarray failed to import
    
    
    
    
    这是因为cv2要求的Numpy版本与你装的Numpy版本不一致,导致冲突。所以要将两者都重新安装为适配版本就行(可以多试一下哪些版本适配,以下是我用的版本)。
   
    
     解决方法:
    
   
pip install opencv-python==4.5.3.56
pip install numpy==1.21.2
若安装指定版本需管理者权限
pip install --user-v scikit-learn==0.18.0	# 以管理者身份下载scikit-learn的0.18.0版本
    
     参考资料:
     
     [1]:
     
      https://xfxuezhang.blog.csdn.net/article/details/98727562
     
     
     [2]:
     
      https://blog.csdn.net/msq16021/article/details/111353277
     
    
   
    
     5、报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool
    
   
    
     解决方法:
    
   
pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 
    
     参考资料:
     
      https://xiaoshuwen.blog.csdn.net/article/details/99698807
     
    
   
    
     6、生成执行文件后无法查看报错信息
    
   
    
     解决方法:
    
   
①在Cmd或在Pycharm的Terminal中,修改目录 > cd 执行文件所在目录,如图:
    
    
    ②然后运行执行文件,如图:
    
    
    
    
     参考资料:
     
      https://blog.csdn.net/cooldream2009/article/details/91039161
     
    
   
    
     7、配置文件
    
   
之前直接用的config.py。main.py中from config import 。但在pyinstaller -w main.py时发现,config.py被当成模块直接打包了,无法修改配置内容。
    
     解决方法:
    
   
把config.py转为.txt文本格式读入Python。
①由于xml格式方便修改内容,而txt格式方便Python读取。我先把config.py转为xml格式,再将文件名扩展名改为txt。
②进行第一次打包:
pyinstaller -w main.py
    ③修改生成的main.spec内容:
    
    datas = [(‘config.txt’, ‘.’),(‘需放入打包的文件如中文字体文件’,‘相对路径’)]
    
    需注意中括号内为元组,如图:
    
     
   
④完成main.spec修改后,再次打包
pyinstaller -F main.spec
    
     参考资料:
     
      https://blog.csdn.net/weixin_44517301/article/details/108173669
     
    
   
    
     8、管理员权限类报错
    
   
①打包*.spec时报错PermissionError: [Errno 13] Permission denied: ‘C:\…\ucrtbase.dll
    
     解决方法:
    
   
关闭360后再打包。
②执行文件打不开
    
     解决方法:
    
   
将执行文件整个文件夹加入360信任区。
③执行文件无法删除,需管理员权限
    
     解决方法:
    
   
    法一、拼手速。重启电脑后快速删除文件,因为管理员权限加载需要时间。
    
    法二、关闭360后删除。
    
    法三、替换文件。
   
❤❤❤❤❤
 
