python转exe遇到的坑及解决方案

python算是目前比较火的编程语言,但是有时需要将写好的程序放在没有python环境的windows机器上运行,这时就需要将.py文件转为.exe文件,我用的是pyinstaller这个库(推荐使用这个库,py2exe这个库问题更多),结果在使用过程中出现了几个意想不到的错误,这里记录一下问题及解决方案。

1.安装pyinstaller

正常来说在cmd界面下,输入以下命令即可正常安装

pip install pyinstaller

如果出现问题或下载速度太慢,可以选择豆瓣源

pip install -i https://pypi.douban.com/simple/ pyinstaller

目前本人的环境是python3.6+pyinstaller3.2.1

2.正常打包命令

pyinstaller -F -w  -i ico_path  py_path 

-F 是将所有文件打成一个exe文件,一般是必写的(注意必须是大写)
-w 是程序运行时不显示cmd界面(避免有些程序点击之后黑框一闪而过)
-i 修改生成的exe文件图标,可以不写(-i 不写的话 ico_path也别写)
ico_path 是生成的exe文件图标位置
py_path 是目标py文件位置

3.各种问题及解决方案

3.1 打包之后exe文件找不到

生成的exe文件是在dist 目录下, 而不是build目录下的那一堆。

3.2 exe点开之后就出现failed to execute script xxx

这个问题主要是使用pyinstaller命令时使用-w参数与print()或subprocess.run()等的冲突。
前面提到了-w会强制不显示控制台,而print()函数是将信息显示在控制台上,所以两个之间会产生冲突。解决方法是1.使用-w打包的程序中不使用任何print()或input()之类需要操作台的命令。2.使用pyinstaller时不加-w。

3.3 打包之后的exe文件超级大

有些程序写完之后本来只有几十kb,但转成exe之后就变成了几百MB。这个主要是因为在写python程序时,如果import 某个库,转exe文件时会将整个库都打包在exe文件里,所以最好的解决方法是只import需要用到的部分而不是整个库,例如只需要使用numpy里的array

import numpy as np #错误示范
from numpy import array #正确写法

3.4 打包时出现UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position XXX: invalid continuation b

主要原因是编码格式冲突
解决方法1.删除中文注释 2. 在运行pyinstaller 前先在cmd里输入

chcp 65001

你可能感兴趣的:(自用,python)