一 .py文件编译成二进制.pyd文件
1.环境准备
①Anaconda 3.5,PyTorch环境搭建
转自: PyTorch环境搭建.
②可能遇到的问题解决:anaconda打不开
2.测试
进入cython_test路径下,终端运行命令
python setup.py build_ext --inplace
删除test.py,测试结果
python use_test.py
windows打包exe教程直接看第二部分↓
二.windows下使用pyinstaller 打包成exe
1.环境准备
- pyinstaller安装
conda install pyinstaller
- 打包exe
pyinstaller -F xxx.py
2.出现报错相应的解决方法
- RecursionError: maximum recursion depth exceeded
解决方法来源
pyinstaller 之后会生成一个和xxx.py文件对一个的 xxx.spec 文件
打开xxx.spec文件,在行首导入sys包,然后设置一下递归调用的限制次数,可以尽量大一点,我这里设置100万次后就没有报错了
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(100000)
重新打包xxx.spec
pyinstaller -F --noupx xxx.spec
- UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 122: invalid continuation byte
解决方法来源
解决办法:在你打包的命令行中先输入chcp 65001 然后再输入打包命令。 - WARNING: file already exists but should not: C:\Users\ADMINI~1\AppData\Local\Temp_MEI130922\torch_C.cp38-win_amd64.pyd
转自
解决方法:
pyinstaller 之后会生成一个和xxx.py文件对一个的 xxx.spec 文件
打开xxx.spec文件,加入以下代码
for d in a.datas:
if '_C.cp38-win_amd64.pyd' in d[0]:
a.datas.remove(d)
break
插入的位置
再次运行
pyinstaller -F --noupx xxx.spec
- 生成的exe报错
解决方法
使用如下命令时不会报错,但生成的exe稍大一些
pyinstaller -F --noupx xxx.py
- 生成的exe报错Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll
转自
解决方法:
把 C:\Users\用户名\Anaconda3\Library\bin 文件夹中 mkl_ 开头的文件和libiomp5md.dll拷贝到 python 的根目录下(与 python.exe 同目录) - 其他问题
打包可能会出现图片等资源丢失,将缺少的文件放置到打包后的同级目录下即可。
3.参考文章
pyinstaller打包exe详细教程及命令参考
pyinstaller 完美解决打包图片等资源的问题
Pyinstaller库官方文档部分翻译