pipenv创建虚拟环境,并用Pyinstaller 打包流程

pipenv创建虚拟环境,并用Pyinstaller 打包流程

  • 背景
    • 1. 用pipenv创建python3.6.6虚拟环境
    • 2. 在虚拟环境内通过pyinstaller打包
        • 打包参数:
    • 添加管理员权限启动(UAC)

背景

最近由于需要经常切换DNS,就用python做了个小工具,程序中用到了pywin32, wmi, tkinter, 虚拟环境用pipenv,并用pyinstaller打包,最后用mt.exe添加UAC权限,在此将打包过程写下来

1. 用pipenv创建python3.6.6虚拟环境

创建固定版本python虚拟环境需要先在本机安装该版本,并添加到系统环境变量(下面的命令均在windows下的powershell执行):

  1. 安装pipenv
 pip install pipenv   
  1. 在干净目录下初始化python环境, 系统会自动在环境变量里搜索符合要求的python环境
pipenv --python 3.6
  1. 进入虚拟环境(第一次进入会自动进行安装 pipenv install)
pipenv shell
  1. 退出虚拟环境
exit
  1. 进入虚拟环境内,通过pip安装程序依赖(期间32位python3.4环境下安装pywin32一直失败,后来换成64位python3.6成功,具体原因还未探究,有可能本人使用的阿里pip服务,未找到相应的包)
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]

2. 在虚拟环境内通过pyinstaller打包

步骤简单,参数较多,如:用dnstool.py的单个python代码,生成以logo.ico为图标的单个exe窗体应用。

pyinstaller -F -w -i logo.ico dnstool.py

打包参数:

  • -F 打包成单个exe文件,如果没有-F参数,则放在代码同名的文件夹内
    该参数有可能导致你的应用在不同环境下发生兼容问题,而将依赖打包在同一文件夹下的方式兼容性更强
  • -w / -c 打包成窗体应用,还是 控制台应用
  • -i icon.ico 添加默认图标, 多个png生成单个ico文件工具 ,不过不同windows系统下图标有兼容问题,懒得详细探究了
    参考1
    官方文档

添加管理员权限启动(UAC)

  1. 在生成后的exe跟目录创建一个后缀为 .manifest 具有相同exe名的文件,将下面代码写入
  
<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>  
  1. 也可以将 manifest 文件写入exe,适合单个文件的应用
  • 工具mt.exe的文件位置:C:\Program Files (x86)\Windows Kits\10\bin\x64\mt.exe
  • 用cmd命令进入mt.exe 文件根目录,通过如下命令将manifest文件写入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窗口

你可能感兴趣的:(python)