偶尔用python写点小程序,需要打包成exe,但又不想泄漏源码,于是乎找到了转成pyd再用pyinstaller进行打包,此间踩坑无数,特此记录
将py转成pyd文件需要用到Cython库,打包exe用的是pyinstaller,通过以下命令安装即可
pip install Cython pip install pyinstaller坑1:Unable to find vcvarsall.bat
Pyhon不同的版本需要安装相应的vs才能顺利将py转成pyd,否则会报 “Unable to find vcvarsall.bat” 错误,在令行窗口中直接输入python即可查看安装python信息: 我这里安装的是Python 3.8.0,相应的vs版本是【MSC v.1916】,下面是vs对应版本信息,所以我这里需要安装的是Visual Studio 2017 version 15.9.0 到 Visual Studio 2017 version 15.9.11 这几个中的任意一个版本
AbbreviationProduct name [Visual Studio version]VC ++ version_MSC_VER2019 Update 5Visual Studio 2019 version 16.5.114.2519252019 Update 4Visual Studio 2019 version 16.4.014.2419242019 Update 3Visual Studio 2019 version 16.3.214.2119232019 Update 2Visual Studio 2019 version 16.2.314.2119222019 Update 1Visual Studio 2019 version 16.1.214.2119212019Visual Studio 2019 version 16.0.014.2019202017 Update 9Visual Studio 2017 version 15.9.1114.1619162017 Update 9Visual Studio 2017 version 15.9.714.1619162017 Update 9Visual Studio 2017 version 15.9.514.1619162017 Update 9Visual Studio 2017 version 15.9.414.1619162017 Update 9Visual Studio 2017 version 15.9.114.1619162017 Update 9Visual Studio 2017 version 15.9.014.1619162017 Update 8Visual Studio 2017 version 15.8.014.1519152017 Update 7Visual Studio 2017 version 15.7.514.1419142017 Update 7Visual Studio 2017 version 15.7.314.1419142017 Update 7Visual Studio 2017 version 15.7.214.1419142017 Update 7Visual Studio 2017 version 15.7.114.1419142017 Update 6Visual Studio 2017 version 15.6.714.1319132017 Update 6Visual Studio 2017 version 15.6.614.1319132017 Update 6Visual Studio 2017 version 15.6.414.1319132017 Update 6Visual Studio 2017 version 15.6.314.1319132017 Update 6Visual Studio 2017 version 15.6.214.1319132017 Update 6Visual Studio 2017 version 15.6.114.1319132017 Update 6Visual Studio 2017 version 15.6.014.1319132017 Update 5Visual Studio 2017 version 15.5.714.1219122017 Update 5Visual Studio 2017 version 15.5.614.1219122017 Update 5Visual Studio 2017 version 15.5.414.1219122017 Update 5Visual Studio 2017 version 15.5.314.1219122017 Update 5Visual Studio 2017 version 15.5.214.1219122017 Update 4Visual Studio 2017 version 15.4.514.1119112017 Update 4Visual Studio 2017 version 15.4.414.1119112017 Update 3Visual Studio 2017 version 15.3.314.1119112017 Update 2Visual Studio 2017 version 15.214.1019102017 Update 1Visual Studio 2017 version 15.114.1019102017Visual Studio 2017 version 15.014.1019102015 Update 3Visual Studio 2015 Update 3 [14.0]14.019002015 Update 2Visual Studio 2015 Update 2 [14.0]14.019002015 Update 1Visual Studio 2015 Update 1 [14.0]14.019002015Visual Studio 2015 [14.0]14.01900我这里已下载好2017的,如有需要可以直接取:链接: https://pan.baidu.com/s/1VRMwwtWGlUZLfPDcmW48ng 提取码: yd9e
这里有两个文件需要安装,先安装 vs_professional__2017.exe,再安装 visualcppbuildtools_full.exe
下图为安装vs_professional__2017.exe界面,这里直接点击右下角的安装即可,其他的不用勾选
创建一个setup.py,内容如下:
from distutils.core import setup from Cython.Build import cythonize setup( ext_modules = cythonize(["add.py"]), # add.py 为需要打包的文件名,不能包含中文 )在令行窗口中输入以下命令来生成pyd文件:
python setup.py build_ext --inplace按回车后,会生成 add.cp38-win_amd64.pyd,修改文件名为add.pyd,即删除多的【.cp38-win_amd64】
注意:因系统不同这一部分可能不一样
坑2:ValueError: script ‘C:\Users\de\Desktop\add\add.pyd’ not found
创建引导文件 index.py,这里面需要import引用的模块,如果直接打包pyd文件会报错:【ValueError: script ‘C:\Users\de\Desktop\add\add.pyd’ not found】
index.py 内容如下,除了引用的内容外,还要import生成的add.pyd文件
import urllib.request import http.cookiejar from urllib import parse import json,yagmail,datetime import tkinter as tk from tkinter.filedialog import * import add #注意修改为自己的文件名最后通过以下命令进行打包:
pyinstaller.exe -Fw .\index.py -i .\ico\f.icopyinstaller参数说明:-Fw,是创建单个exe文件,并隐藏命令行窗口,-i是指定ico图片
坑3:ico图标不生效
pyinstaller经常在打包时会发现ico不生效,这是因为exe需要多个尺寸的ico文件,我的ico目录中32X32,48X48和64X64的3个尺寸,只需指定其他一个文件名即可
以此记之,慢慢填坑路
