python3 pyinstaller编译相关 和 python2兼容的一些问题
一: python2 和 python3的兼容问题
如果本地同时安装了python2
和 python3
, 且都配置了环境变量的情况下, 在命令行里如何区分呢?
python2: py -2
python3: py -3
如何区分python2的pip 与 python3 的pip呢
python2: pip install xxx
python3: pip3 install xxx
二: pyinstaller 编译区分
只有python2的情况下, 我们可以用如下命令进行打包
pyinstaller -F test.py
如果同时存在python2 和 3, 那么何区分一个py文件是用python2打包, 还是python3打包呢?
python2: py -2 -m PyInstaller -F --version-file version_info.txt downloader.py
python3: py -3 -m PyInstaller -F --version-file version_info.txt downloader.py
其中 -2
和-3
指的是用哪个python版本, -m
指的是用python环境中指定的模块
更详细的参数请参考
pyinstaller打包exe,设置发布者,版权,产品名称等版本信息
三: python3编译相关问题
1.标准输入输出编码问题
编译出的exe, 作为子进程, 然后主进程通过控制标准输入输出来进行交互, 具体实现方式请参考:
python控制exe, 并进行输入输出
正常我们在pycharm里输出
import sys
print(sys.stdout.encoding)
print(sys.stdin.encoding)
运行结果是
但是如果我们把这段代码用pyinstaller编译成exe, 然后再运行, 我们会发现, 输出变成了:
所以我们一定要手动设置上标准输入输出的编码, 否则如果传输过程中有中文, 那么就会出问题
sys.stdin.reconfigure(encoding='utf-8')
sys.stdout.reconfigure(encoding='utf-8')
当然, 传递信息, 还是更推荐base64的方式, 这样无论环境怎么变化, 流程都是一致的