最近由于需要经常切换DNS,就用python做了个小工具,程序中用到了pywin32, wmi, tkinter, 虚拟环境用pipenv,并用pyinstaller打包,最后用mt.exe添加UAC权限,在此将打包过程写下来
创建固定版本python虚拟环境需要先在本机安装该版本,并添加到系统环境变量(下面的命令均在windows下的powershell执行):
pip install pipenv
pipenv --python 3.6
pipenv shell
exit
pip install wmi
pip install pywin32
pip install pyinstaller
这里安装不太规范,应该使用pipenv install packagename, 这样会把依赖包写入当前虚拟环境目录中的Pipfile, 方便我们开发完成后的部署
Pipfile详细描述:[https://blog.windrunner.me/python/pip.html]
更多pipenv参数介绍:[http://blog.51cto.com/1840558/2073283]
步骤简单,参数较多,如:用dnstool.py的单个python代码,生成以logo.ico为图标的单个exe窗体应用。
pyinstaller -F -w -i logo.ico dnstool.py
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="myapp.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
requestedPrivileges>
security>
trustInfo>
assembly>
C:\Program Files (x86)\Windows Kits\10\bin\x64\mt.exe
mt -manifest D:\Git\Python\pipenv3.4\dist\dns.exe.manifest -outputresource:D:\Git\Python\pipenv3.4\dist\dns.exe;1
写入成功后可以发现我们的exe文件图标上多了个盾牌
参考:通过添加manifest文件,使启动应用时弹出UAC窗口