Python用了好几年了,但似乎一直没 “系统入门” 过(o(╯□╰)o)。今年(2023年)趁着五一假期,我做了一次相对完整的 “入门” ——本文是这次学习历程的详细记录。
目录
- 1 Python基础
- 1.1 Python
- 1.1.1 认识Python
- 1.1.2 Python安装
- 1.1.3 pip包管理
- 1.2 Python开发工具
- 1.2.1 PyCharm(专业版)
- 1.2.2 Anaconda
- 2 Python虚拟环境
- 2.1 认识虚拟环境
- 2.2 虚拟环境管理
- 2.2.1 pipenv工具
- 2.2.2 virtualenv工具
- 2.3 开发中使用虚拟环境
- 3 Python开发(Coding)
- 3.1 第一种——命令+PyCharm
- 3.2 第二种——纯PyCharm
- 4 PyQT5
- 4.1 PyQT5安装、配置
- 4.1.1 安装PyQT5
- 4.1.2 配置PyQT5
- 4.2 PyQT5开发示例
- 4.2.1 PyQT UI设计
- 4.2.2 业务逻辑代码
- 5 Python程序打包
- 5.1 打包基础知识
- 5.2 打包示例
- 附 本文示例程序下载
1 Python基础
1.1 Python
1.1.1 认识Python
Python
由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言
的替代品。Python
提供了高效的高级数据结构,还能简单有效地面向对象编程。Python
语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。随着版本的不断更新和语言新功能的添加,逐渐被用于独立、大型项目的开发。
Python
解释器易于扩展,可以使用C
或C++
(或其他可以通过C
调用的语言)扩展新的功能和数据类型。Python
也可用于可定制化软件中的扩展程序语言。Python
丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
下面,我们通过一些代码来感受Python
的简单、优雅、高效。
(1)第一个程序:
word=100 #无需定义
word="Hello, World!" #类型可变
print(word)
(2)选择程序设计:
## 选择程序设计
# <if多分支>
s=95
if s>=90:
print("优秀")
elif 80<=s<90: #逻辑运算连写
print("良好")
elif 60<=s<80:
print("合格")
else:
print("不合格")
# <三元运算符>
x,y=15,22
big= x if x>y else y #如果x>y则x,否则y
(3)循环程序设计:
## 循环程序设计
# <while-else循环>
s=n=1
while n<=100:
s+=n
n+=1
else:
print("1~100求和:{0}".format(s))
# <for循环>
PI=0
N=100
for k in range(N):
PI += 1/pow(16,k)*( \
4/(8*k+1) - 2/(8*k+4) - \
1/(8*k+5) - 1/(8*k+6))
print("圆周率π={:.9f}".format(PI))
(4)数据结构:
## 数据结构
# <列表>
a=[1,2,3,4,5] #a=list()
print(a[0]) #下标
print(a[2:-1]) #切片
aa=[value*10 for value in a if value >3] #列表解析
# <元组>
b=(1,2,3,4,(5,50)) #b=tuple()
print(b[4]) #下标
print(b[2:4]) #切片
# <字典>
c=dict([["m",12],["n","wer"],["2",55]]) #c=dict(x=1,y=2,z=3)
print(c["2"]) #访问
f1=lambda p:p+10;f2=lambda p:p+20 #lambda表达式
cc={f1(p):f2(p) for p in range(4)} #字典解析
(5)函数:
## 函数
# <一般形式>
def func(x):
m=x+100
n=x/10
return m,n
# <默认形参>
def func1(x,y=100):
m=x+y
n=x-y
return m*n
# <变长形参>
def func2(*t): #元组
a=0
for v in t:
a+=v
return a
def func3(**d): #字典
for k,v in d.items():
print("{0}<-->{1}".format(k,v))
# <关键参数>
def func4(x,y,z):
x+=10
y+=100
z+=1000
return x,y,z
# lambda表达式
func5=lambda p,q=0:p*q+3
if __name__=="__main__":
m,n=func(10) #一般形式
a=func1(20) #默认形参
b=func2(1,2,3,4,5) #变长形参-元组
func3(**dict(a=1,b=2,c=3)) #变长形参-字典
x,y,z=func4(y=10,z=20,x=15) #关键参数
c=func5(10,2) #lambda
(6)类与对象:
# <类>
class Person:
PId=100 #类变量,含于cls
def __init__(self,**args): #构造函数
self.name=args['name']
self.age=args['age']
self.__ID=args['ID'] #私有变量
self.phone=args['phone']
def GetIdentity(self): #对象方法
print("ID:{0},Name:{1},Age:{2},Phone:{3}".format(self.__ID,self.name,self.age,self.phone))
@classmethod
def GetPId(cls): #类方法
print("PId=>{0}".format(cls.PId))
@staticmethod
def eat(): #静态方法
print("人吃东西!")
if __name__=="__main__":
person=Person(**dict(name='yxy',age=26,ID=522626,phone=1350855))
(7)机器学习:
import warnings
from pandas import read_csv
from sklearn.model_selection import KFold,cross_val_score
from sklearn.svm import SVC
warnings.filterwarnings("ignore")
#导入数据
name=["preg","plas","pres","skin","test","mass","predi","age","class"] #字段属性
piData=read_csv('e:\\file home\\Pima_Indians.csv',names=name)
#将数据分为特征、标签
Data=piData.values[:,0:8] #特征
Label=piData.values[:,8] #标签
kfold=KFold(n_splits=10,random_state=7)
model=SVC()
res=cross_val_score(model,Data,Label,cv=kfold) #分类准确度
print("准确度: %.5f"%(res.mean())) # 0.65103
1.1.2 Python安装
(一)下载安装包:
访问 Python官网 下载 Python安装包,目前(截至2023年4月26日)最新稳定版是 Python3.11.3,如下图所示。至于到底选择3.10还是3.11,取决于您的电脑配置和意愿了。
(二)安装Python:
安装Python与安装其他Windows软件一样简单,但需注意以下几个地方:
Install Python(安装选项) | Customize installation(自定义安装) |
Add Python xx to PATH(添加Python到环境变量) | |
Optional Features(选择功能组件) | Documentation(帮助文档) |
pip(包管理器) | |
tcl/tk and IDLE(Python开发环境) | |
Python test suite(标准库和测试套件) | |
py launcher(Python启动器,关联.py文件) | |
for all users(所有用户可用) | |
Advanced Options(高级选项) | Install for all users(为所有用户安装) |
Associate files with Python(关联.py文件) | |
Create shortcuts for installed applications(为安装程序创建快捷方式) | |
Add Python to environment variables(添加Python到环境变量) | |
Precompile standard library(预编译标准库) |
其他参考资料:Python安装教程-史上最全。
1.1.3 pip包管理
(1)CMD清屏:cls
;
(2)CMD查看当前路径:chdir
;
(3)CMD终止执行命令:Ctrl+C
;
(4)CMD切换路径:
序号 | 操作 | 代码 |
---|---|---|
一 | 当前目录 | chdir ,如C:\WINDOWS\system32 |
二 | 切换根目录 | 如E: |
三 | 切换至目标目录 | 如cd E:\Download |
(5)CMD打开路径:
方法 | 代码 |
---|---|
方法一 | ①开始菜单,搜索cmd ;②以管理员身份运行;③切换至目标目录(参考(4))。 |
方法二 | ①打开目标目录;②地址栏输入cmd ,回车。 |
(6)pip包管理:
在线形式:
序号 | 操作 | 代码 |
---|---|---|
一 | pip版本 | pip --version |
二 | 安装包 | pip install numpy (最新版)、pip install numpy==1.24.3 (指定版)或pip install "keras>=2.9.0" (最低版) |
三 | 更新包 | pip install --upgrade scipy |
四 | 列出所有包 | pip list |
五 | 卸载包 | pip uninstall scipy |
六 | 临时换源 | -i 源址 ,如-i https://pypi.tuna.tsinghua.edu.cn/simple (清华源,其他源附后) |
七 | 永久换源 | 在C:\Users\×××\pip (无pip 目录则新建)创建文件pip.ini ,编辑换源代码 (附后) |
八 | 批量安装包 | pip install -r requirements.txt (pip freeze > requirements.txt ) |
九 | 下载包(不安装) | pip download numpy==1.24.3 -i https://pypi.tuna.tsinghua.edu.cn/simple -d E:\Download |
十 | 查看帮助文档 | pip --help |
换源代码:
[global]
time-out=6000
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
[install]
use-mirrors=true
mirrors=https://pypi.tuna.tsinghua.edu.cn/simple/
trusted-host=pypi.tuna.tsinghua.edu.cn
另外,也可cmd
执行如下代码永久换源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple #设置清华源
pip config unset global.index-url #恢复默认源
附:国内常用的镜像源
- 清华大学:
https://pypi.tuna.tsinghua.edu.cn/simple/
; - 中国科学技术大学:
https://pypi.mirrors.ustc.edu.cn/simple/
; - 阿里云:
https://mirrors.aliyun.com/pypi/simple/
; - 豆瓣:
https://pypi.douban.com/simple/
。
离线形式:
序号 | 操作 | 代码 |
---|---|---|
一 | 下载包 | 网址https://pypi.org/ 、https://www.lfd.uci.edu/~gohlke/pythonlibs/ 等 |
二 | 安装包 | pip install 路径+somePackage ,如pip install E:\Download\numpy-1.24.3-cp38-cp38-win_amd64.whl |
1.2 Python开发工具
在这里,我推荐两款Python开发工具:①Pycharm(适合开发);②Anaconda(适合科学计算)。以下介绍两款开发工具的安装。
1.2.1 PyCharm(专业版)
(一)下载安装包:
访问 PyCharm官网 下载 PyCharm安装包(请选择PyCharm2022.3.2
及以下版本),下载页面如下图所示。
(二)安装PyCharm:
(1)右键安装包,以管理员身份运行。
(2)选择安装路径,如D:\PyCharm 2022.3
。
(3)安装选项,选择Create Desktop Shortcut
(其他可不用)。
(4)选择开始菜单文件夹,如JetBrains
;然后点击安装Install
。
(5)安装完成后,勾选Run Pycharm
再点击完成Finish
。
(6)接受用户许可后,Pycharm
首次运行弹出如下对话框,这里先不管,直接点击Exit
退出。
剩余安装步骤请扫描下方公众号二维码或关注公众号:徐公,回复关键字:Pycharm
获取。
(三)配置PyCharm:
(1)启动进入欢迎页:【欢迎页(Welcome to PyCharm
)】
→
\rightarrow
→【自定义(Customize
)】
→
\rightarrow
→【所有设置(All settings
)】
→
\rightarrow
→【外观和行为(Appearance and Behavior
)】
→
\rightarrow
→【系统设置(System Seetings
)】
→
\rightarrow
→【项目(Project
)】
→
\rightarrow
→【取消启动时重新打开项目
(Reopen projects on startup
)】
→
\rightarrow
→【确认(OK
)】。
(2)预设Coding默认信息:【欢迎页(Welcome to PyCharm
)】
→
\rightarrow
→【自定义(Customize
)】
→
\rightarrow
→【所有设置(All settings
)】
→
\rightarrow
→【编辑(Editor
)】
→
\rightarrow
→【文件和代码模版(File and Code Templates
)】
→
\rightarrow
→【Python脚本(Python Script
)】
→
\rightarrow
→【默认信息(附后)】
→
\rightarrow
→【确认(OK
)】。
# -*- coding: utf-8 -*-
"""
# @Time : ${DATE} ${TIME}
# @Author : xyyang(自定义)
# @Email : xyyangwhu@163.com(自定义)
"""
(3)恢复默认(出厂)设置:【文件(File
)】
→
\rightarrow
→【管理IDE
设置(Manage IDE Settings
)】
→
\rightarrow
→【恢复默认设置(Restore Default Settings
)】
→
\rightarrow
→【确认(OK
)】。
(4)取消PEP8
代码风格检查(黄色下划线):【文件(File
)】
→
\rightarrow
→【设置(Settings
)】
→
\rightarrow
→【编辑(Editor
)】
→
\rightarrow
→【检查(Inspections
)】
→
\rightarrow
→【Python
】
→
\rightarrow
→【取消PEP8
代码风格冲突(PEP8 coding style violation
)】
→
\rightarrow
→【确认(OK
)】。
1.2.2 Anaconda
访问 Anaconda官网 下载 Anaconda安装包,安装方法同大多数Windows软件一样,故此处不再赘述。详细教程可参考:Anaconda安装(过程详细)或【保姆级教程】Anaconda的安装(包括介绍、下载、安装与环境变量配置等)。
2 Python虚拟环境
2.1 认识虚拟环境
Python应用程序经常使用第三方包或者模块,有时还需依赖特定的版本,故不存在一个能适应所有Python应用程序的编程环境(解释器环境)。很多时候Python应用程序所依赖的版本相互冲突,满足其中一个则另一个无法运行,解决这一问题的策略——虚拟环境。虚拟环境是一个包含了特定Python解析器及一些软件包的自包含目录,不同应用程序可使用不同的虚拟环境,从而解决了依赖冲突问题,且虚拟环境中只需安装应用相关的包、模块,给部署提供了便利。使用虚拟环境的优点如下:
- 在虚拟环境中安装和卸载库不影响全局库(特别方便学习);
- 方便不同的项目使用特定版本的库,相互独立不干扰;
- 根据虚拟文件,可方便地搭建与开发环境相同的部署环境。
在Python中,使用pipenv
管理虚拟环境——它是基于pip的Python包管理工具,和pip的用法非常相似,可看作pip的加强版。pipenv
的出现解决了旧的pip+virtualenv+requirements.txt
工作方式的弊端。具体来说,它是pip
、Pipfile
和Virtualenv
的结合体。
2.2 虚拟环境管理
2.2.1 pipenv工具
序号 | 操作 | 代码 |
---|---|---|
一 | 进入项目路径(必须) | cd C:\Users\xyyan\Desktop\devPrj |
二 | 安装虚拟工具(查看版本) | pip install pipenv (pipenv --version ) |
三 | 创建虚拟环境(生成Pipfile、Pipfile.lock) | pipenv install 或pipenv [install] --python 3.8 (基于系统安装的Python) |
四 | 激活虚拟环境(查看目录) | pipenv shell (pipenv --venv ) |
五 | 安装包 | pipenv install numpy==1.24.0 (参数-i 无效,可参考1.1.3-(6) 换源) |
六 | 更新包 | pipenv update numpy |
七 | 卸载包 | pipenv uninstall numpy (指定)、pipenv uninstall --all (所有) |
八 | 列出所有包 | pip list |
九 | 查看包的依赖关系 | pipenv graph |
十 | 生成(更新)Pipfile.lock | pipenv lock (pipenv update =pipenv lock +pipenv sync ) |
十一 | 退出虚拟环境 | exit |
十二 | 删除虚拟环境 | pipenv --rm (需在目录下,不管激活与否) |
十三 | 查看帮助文档 | pipenv --help |
2.2.2 virtualenv工具
序号 | 操作 | 代码 |
---|---|---|
一 | 进入项目路径(必须) | cd E:\Python Codes\PyprjTest0429 |
二 | 安装虚拟工具(查看版本) | pip install virtualenv (虚拟环境模块)、pip install virtualenvwrapper-win (辅助模块) |
三 | 创建虚拟环境并进入 | mkvirtualenv -p python3.10 PPTenv0429 (指定Python)、mkvirtualenv PPTenv0429 (系统Python) |
四 | 查看已有的虚拟环境 | workon |
五 | 使用某个虚拟环境 | workon PPTenv0429 |
六 | 安装包 | pip install numpy==1.24.0 、pip install -r requirements.txt (批量) |
七 | 更新包 | pip update numpy |
八 | 卸载包 | pip uninstall numpy (指定)、pip uninstall --all (所有) |
九 | 列出所有包 | pip list |
十 | 退出虚拟环境 | deactivate |
十一 | 删除虚拟环境 | rmvirtualenv PPTenv0429 (先退出,再删除) |
其中,新建虚拟环境位于C:\Users\×××\.virtualenvs
,而Pipfile、Pipfile.lock文件位于项目所在路径,如C:\Users\xyyan\Desktop\devPrj
。若欲 将虚拟环境置于项目目录,需按以下步骤设置(系统)环境变量WORKON_HOME
:【此电脑】
→
\rightarrow
→【右键/属性】
→
\rightarrow
→【高级系统设置】
→
\rightarrow
→【系统属性/环境变量】
→
\rightarrow
→【系统变量】
→
\rightarrow
→【新建】
→
\rightarrow
→【变量名:WORKON_HOME
、变量值:venv
】
→
\rightarrow
→【确定】。
其他参考资料:Python学会使用虚拟环境——pipenv。
2.3 开发中使用虚拟环境
(一)开发部分:新建项目(devPrj
文件夹),创建虚拟环境并于其中开发(根据项目需求安装依赖包库)。最终,形成项目源代码文件
、Pipfile文件
和Pipfile.lock文件
,并将其(三者)移交给部署人员。
(二)部署部分:新建项目(depPrj
文件夹),cmd
打开文件夹,通过pipenv install
根据Pipfile、Pipfile.lock自动安装第三方包库,从而恢复开发环境。
3 Python开发(Coding)
前两章详细讲述了Python+PyCharm安装、Python虚拟环境,本章介绍如何使用PyCharm开发Python程序。
3.1 第一种——命令+PyCharm
(1)新建项目文件(确定好路径):
(2)使用PyCharm打开项目:
(3)创建虚拟环境并激活(基于PyCharm终端):
可看到项目文件夹生成了Pipfile
、Pipfile.lock
文件:
(4)设置项目Python解释器:【File
】
→
\rightarrow
→【Seetings
】
→
\rightarrow
→【Project:PyPrjTest0428
】
→
\rightarrow
→【Python Interpreter
】
→
\rightarrow
→【Add Interpreter
】
→
\rightarrow
→【Add Local Interpreter
】
→
\rightarrow
→【Existing
】
→
\rightarrow
→【Browser
】
→
\rightarrow
→【C:\Users\xyyan\.virtualenvs\PyPrjTest0428-_k3qSpRL\Scripts\python.exe
(根据实际)】
→
\rightarrow
→【OK
】,如下图:
(5)在虚拟环境中安装包(基于PyCharm终端):
(6)新建Python文件:
(7)编写Python代码并运行:
代码如下:
import math
def GetArea(r):
S=math.pi*r*r
return S
if __name__=="__main__":
S=GetArea(5)
print("面积={:.2f}".format(S))
至此,第一种方式(命令+PyCharm)便介绍完毕。
3.2 第二种——纯PyCharm
(1)使用PyCharm创建新项目:
(2)配置虚拟环境参数:
(3)在虚拟环境中安装包(基于PyCharm终端):
(4)新建Python文件:
(5)编写Python代码并运行:
代码如下:
def GetMax(*arg):
maxelem=arg[0]
for elem in arg:
if elem>maxelem:
maxelem=elem
return maxelem
if __name__=="__main__":
maxelem=GetMax(4,1,7,3,5)
print("最大值是:{}".format(maxelem))
至此,第二种方式(纯PyCharm)便介绍完毕。
4 PyQT5
4.1 PyQT5安装、配置
4.1.1 安装PyQT5
PyQT5是基础常用模块,可安装在Python包目录(如D:\Python310\Lib\site-packages
),也可安装于某项目的虚拟环境(如C:\Users\×××\.virtualenvs\PyCharmTest\Lib\site-packages
)。
(1)安装PyQT5:pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
,执行情况见下图:
(2)安装PyQT5-tools:pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
,执行情况见下图:
查看Python包目录可知,Python UI界面设计QT Designer
位于路径D:\Python310\Lib\site-packages\qt5_applications\Qt\bin
中。
4.1.2 配置PyQT5
PyCharm配置PyQT5包含 Qt Designer(Python UI设计器——可视化界面控件拖拽设计)、PyUIC(将.ui
文件转换成.py
文件)和PyRcc(将.qrc
资源文件换成.py
文件)这三项的配置,按步骤【欢迎页(Welcome to PyCharm
)】
→
\rightarrow
→【自定义(Customize
)】
→
\rightarrow
→【所有设置(All settings
)】
→
\rightarrow
→【工具(Tools
)】
→
\rightarrow
→【外部工具(External Tools
)】
→
\rightarrow
→【加号(+
)】准备配置。
(一)Qt Designer配置:
配置项目见下表:
序号 | 项目 | 配置内容 |
---|---|---|
一 | Name | Qt Designer (自定义) |
二 | Description | Python UI designer (自定义) |
三 | Program | D:\Python310\Lib\site-packages\qt5_applications\Qt\bin\designer.exe (根据实际情况) |
四 | Arguments | $FilePath$ |
五 | Working directory | $FileDir$ |
配置结果如下图:
(二)PyUIC配置:
配置项目见下表:
序号 | 项目 | 配置内容 |
---|---|---|
一 | Name | PyUIC (自定义) |
二 | Description | Convert ui files to Python files (自定义) |
三 | Program | D:\Python310\python.exe (根据实际情况) |
四 | Arguments | -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py |
五 | Working directory | $FileDir$ |
配置结果如下图:
(三)PyRcc配置:
配置项目见下表:
序号 | 项目 | 配置内容 |
---|---|---|
一 | Name | PyRcc (自定义) |
二 | Description | Convert qrc files to Python files (自定义) |
三 | Program | D:\Python310\Scripts\pyrcc5.exe (根据实际情况) |
四 | Arguments | $FileName$ -o $FileNameWithoutExtension$_rc.py |
五 | Working directory | $FileDir$ |
配置结果如下图:
其他参考资料:PyQt5 从零开始环境搭建、PyQt完整入门教程。
4.2 PyQT5开发示例
新建项目,并为其创建虚拟环境(详细步骤请参考本文3.1
或3.2
);安装PyQT5
包库(若慢,请参考1.1.3-(6)
换源),结果如下图。
4.2.1 PyQT UI设计
按【项目右键】
→
\rightarrow
→【外部工具(External Tools
)】
→
\rightarrow
→【Qt Designer
】打开QT设计器,如下图。
在QT设计器中,按下图设计好UI界面,并保存为Login.ui
文件。
返回PyCharm
,按【Login.ui
右键】
→
\rightarrow
→【外部工具(External Tools
)】
→
\rightarrow
→【PyUIC
】将Login.ui
文件转换成Login.py
文件,结果如下图。
4.2.2 业务逻辑代码
按【项目右键】
→
\rightarrow
→【新建(New
)】
→
\rightarrow
→【Python文件(Python File
)】步骤,新建业务逻辑代码文件MainProgram.py
和用户包库文件UserModuleLib.py
(用于下文测试多Python文件打包)并编辑下图所示代码。
附:MainProgram.py
与UserModuleLib.py
代码:
# MainProgram.py
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow
from Login import Ui_mainForm # 导入UI模块
from UserModuleLib import MyString # 用户包库
class UserLoginMainForm(QMainWindow, Ui_mainForm): # 多继承
def __init__(self, parent=None):
super(UserLoginMainForm, self).__init__(parent) # 初始化基类
self.setupUi(self) # 继承方法
self.setWindowIcon(QIcon(r".\res\userLoginForm.ico")) # 窗体图标
self.PbtnLogin.clicked.connect(self.display) # 登录按钮:信号+槽
self.PbtnExit.clicked.connect(self.close) # 退出按钮:信号+槽
def display(self):
username = self.LedUserName.text() # 获取LineEdit的值
password = self.LedPassword.text()
self.TxtBInformation.setText("登陆成功!\n用户名:{}; 密码:{}".format(MyString(username), password)) # 设置TextBroswer的值
if __name__ == "__main__":
app = QApplication(sys.argv) # 应用程序对象
ulfrm = UserLoginMainForm()
ulfrm.show() # 显示窗体
sys.exit(app.exec_())
# UserModuleLib.py
def MyString(str):
str="UserModuleLib+"+str
return str
按【MainProgram.py
右键】
→
\rightarrow
→【Run 'MainProgram'
】即可运行程序,结果如下图。
5 Python程序打包
Python程序的运行必须要有Python环境,但用户电脑上并非都有Python环境(即便有其版本也可能不同),如何解决这个问题呢?——我们可将Python程序打包为exe
文件。这样,在Windows平台下即可直接运行该程序,而不论有无Python环境。
Python打包模块众多,但一般都使用Pyinstaller
进行,用起来也很简单。因此,本章介绍基于Pyinstaller的Python程序打包。
5.1 打包基础知识
首先,使用pip install pyinstaller
安装Pyinstaller
。由于Pyinstaller
为基础常用模块,可安装在系统Python环境中(或安装在项目虚拟环境中——后续基于虚拟环境打包)。
Pyinstaller
打包命令格式:pyinstaller -option1 -option2 -... 要打包的文件
(如Pyinstaller -F -w somefile.py
、Pyinstaller -F -i someicon.ico somefile.py
),参数选项见下表。
序号 | 参数选项(简写,全称) | 说明 |
---|---|---|
一 | -F, -onefile | 打包成单个可执行文件(仅一个exe 文件) |
二 | -D, -onedir | 打包多个文件,在dist 中生成很多依赖文件,适合以框架形式编写工具代码,该方式代码较易于维护 |
三 | -K, –tk | 在部署时包含TCL/TK |
四 | -a, -ascii | 不包含编码(在支持Unicode 的Python版本上默认包含所有的编码) |
五 | -d, -debug | 产生debug 版本的可执行文件 |
六 | -w, -windowed, -noconsole | 使用Windows 子系统执行,当程序启动时不会打开命令行(只对Windows 有效) |
七 | -c, -nowindowed, -console | 使用控制台子系统执行(默认,只对Windows 有效)。pyinstaller -c xxx.py 、pyinstaller xxx.py --console |
八 | -s, -strip | 可执行文件和共享库将run through strip 。注意Cygwin 的strip 往往使普通的win32 Dll 无法使用 |
九 | -X, -upx | 如果有UPX 安装(执行Configure.py 时检测),会压缩执行文件(Windows 系统中的DLL 也会) |
十 | -o DIR, -out=DIR | 指定spec 文件的生成目录。如果没有指定,而且当前目录是PyInstaller 的根目录,会自动创建一个用于输出(spec 和生成的可执行文件)的目录;如果没有指定,而当前目录不是Pyinstaller 的根目录,则会输出到当前目录下 |
十一 | -p DIR, -path=DIR | 设置导入路径(与使用PYTHONPATH 效果相似)。可以用路径分割符(Windows 使用分号,Linux 使用冒号)分割,指定多个目录也可以使用多个-p 参数来设置多个导入路径,让pyinstaller 自己去找程序需要的资源 |
十二 | -i <FILE.ICO>, -icon=<FILE.ICO> | 将file.ico 添加为可执行文件的资源(只对Windows 系统有效),改变程序的图标。pyinstaller -i 路径.ico xxx.py |
十三 | –i <FILE.EXE, N>, –icon=<FILE.EXE, N> | 将file.exe 的第n个图标添加为可执行文件的资源(只对Windows 系统有效) |
十四 | -v FILE, -version=FILE | 将verfile 作为可执行文件的版本资源(只对Windows 系统有效) |
十五 | -n NAME, -name=NAME | 可选的项目(产生的spec 的)名字。如果省略,第一个脚本的主文件名将作为spec 名字 |
打包后生成build
、dist
文件夹及.spec
文件,exe
文件就在新生成的dist
文件夹下(此时exe
有可能还运行不了,因为它可能涉及到一些资源文件或其他Python文件,将它们置于同一文件夹才可正确运行),如下图所示。打包完成后,spec
文件和build
文件夹即可删除。
一般地,Pyinstaller
会将环境中的库和模块全部打包,这使得一些用不着的库、模块也被包含进去。这些库被打包后,不仅会使exe
文件变大,还会使其运行变卡、变慢,变得十分臃肿。因此,强烈建议大家在(项目)虚拟环境下打包。
其他参考资料(深度好文):用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)。
5.2 打包示例
本次打包即以4.2
节的用户登录程序
为例,项目目录如下:
(1)进入项目文件夹。cmd
或PyCharm Terminal
进入项目文件夹(本文使用后者)。我们可使用pip list
查看项目虚拟环境的包情况(很干净),如下图所示。
(2)生成spec
文件。使用命令pyi-makespec -F -w -i .\res\whu.ico MainProgram.py
生成MainProgram.spec
文件,见下图:
(3)编辑spec
文件。①补全 “a”部分 打包Python文件列表;②确认 “exe”部分 资源文件是否正确,如下图。
(4)执行打包命令。执行打包命令pyinstaller MainProgram.spec
对项目进行打包,执行情况见下图。出现红框内的话表示打包成功。
(5)查看打包结果:打开dist
目录查看打包结果。
(6)程序(软件)打包发布。新建程序(软件)主文件夹UserLogin
,并拷贝exe文件
、res文件夹
等进入,即可打包压缩发布,详情见下图。
至此,基于Pyinstaller
的多Python文件(含PyQT5
库)打包介绍完毕。
附 本文示例程序下载
为方便各位网友学习、交流,请在此处下载示例程序源码:下载示例源码(提取码:rnfz)。