前言

相信大家都试过用Pyinstaller将Python文件打包成exe,来发给其他没有安装Python环境的用户使用。
但通常情况下,打包生成的exe文件都很大,因为Pyinstaller默认是把本地所有安装的Python库都打包进去。
这时,创建一个虚拟环境就是最好的选择,然后在虚拟环境中进行打包。
这里介绍打包QT5界面的操作。

解决

安装Pipenv

pipenv 是用来管理虚拟环境,使用 pip install pipenv 安装 pipenv,pip show pipenv 检查是否安装成功。

添加环境变量

打包QT5需要用到QT5的platforms,所以需要添加环境变量。
新建QT_QPA_PLATFORM_PLUGIN_PATH,路径是platforms路径。比如我电脑下的platforms路径是D:\Programfiles\anaconda3\Lib\site-packages\PyQt5\Qt5\plugins\platforms
重启电脑,让环境变量生效。

具体操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建一个文件夹,来保存虚拟环境相关文件,并cd进入该文件夹下

# 创建Python3虚拟环境
pipenv install --three

# 进入虚拟环境
pipenv shell

# 安装要打包py文件所用到的库以及Pyinstaller
# Pyinstaller是必须要在虚拟环境中安装的,不然会调用环境外的Pyinstaller,这样打包没效果
pipenv install requests
pipenv install pyinstaller

# 开始打包
# -F 表示打包成一个exe,-i 后面接exe的图标
pipenv run pyinstaller -F -w main.py -i shop.ico

Pipenv常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 1.进入到项目目录
[root@localhost ~]# cd /www/wwwroot/myproject

# 2.创建虚拟环境
[root@localhost myproject]# pipenv install
[root@localhost myproject]# pipenv install --three # 使用当前系统的Python3创建环境
[root@localhost myproject]# pipenv --two # 使用python2创建环境
[root@localhost myproject]# pipenv --three # 使用python3创建环境
[root@localhost myproject]# pipenv --python 3.6 # 指定某个Python版本创建环境
[root@localhost myproject]# pipenv --python <path/to/python> # 指定某个位置的Python创建环境

# 3.激活并进入虚拟环境
[root@localhost myproject]# pipenv shell

# 4.在虚拟环境中安装模块,并加入到Pipfile。可以不进入虚拟环境中,直接在项目目录下面使用pipenv安装即可。
(myproject) [root@localhost myproject]# pipenv install requests
(myproject) [root@localhost myproject]# pipenv install django==1.11
(myproject) [root@localhost myproject]# pipenv uninstall requests

# 5.运行python项目
(myproject) [root@localhost myproject]# python Main.py
(myproject) [root@localhost myproject]# pipenv run python main.py

# 6.退出虚拟环境
(myproject) [root@localhost myproject]# exit

# pipenv常见命令
# 创建pipenv虚拟环境
[root@localhost myproject]# pipenv install
[root@localhost myproject]# pipenv --two/--three
# 查看项目所在路径
[root@localhost myproject]# pipenv --where
# 查看虚拟环境所在路径
[root@localhost myproject]# pipenv --venv
# 查看虚拟环境中Python执行文件所在位置(即显示Python解释器信息)
[root@localhost myproject]# pipenv --py
# 进入pipenv虚拟环境(未存在虚拟环境可自动创建)  
[root@localhost myproject]# pipenv shell
# 安装与卸载包
(myproject) [root@localhost myproject]# pipenv install requests
(myproject) [root@localhost myproject]# pipenv uninstall requests
(myproject) [root@localhost myproject]# pipenv uninstall --all # 卸载全部包并从Pipfile中移除
# 查看虚拟环境内安装的包以及包之间的依赖关系
(myproject) [root@localhost myproject]# pipenv graph
# 查找虚拟环境所有安装包
(myproject) [root@localhost myproject]# pip list
# 导出虚拟环境内所有依赖包名
(myproject) [root@localhost myproject]# pip freeze > requirements.txt
# 安装项目所依赖全部模块
(myproject) [root@localhost myproject]# pip install -r requirements.txt
# 检查包的安全性
(myproject) [root@localhost myproject]# pipenv check
# 生成Pipenv.lock,Pipfile.lock用来冻结软件包名称及其版本以及其自己的依赖关系的列表
(myproject) [root@localhost myproject]# pipenv lock
# 退出pipenv虚拟环境  
(myproject) [root@localhost myproject]# exit
# 删除pipenv当前虚拟环境
[root@localhost myproject]# pipenv --rm

Pyinstaller打包参数

pyinstaller打包有不少可选参数,可以根据自己的需要进行添加。

  • -F:打包单个文件,产生一个文件用于部署(默认),如果代码都写在一个 .py 文件时使用,项目有多个文件时不要使用
  • -D:打包多个文件,产生一个目录用于部署(默认),用于框架编写的代码打包
  • --key=keys:使用 keys 进行加密打包
  • -d:产生 debug 版本的可执行文件
  • -p:用来添加程序所用到的包的所在位置,设置导入路径,可以用 ; ( Linux 使用 :)分割来指定多个目录。
  • -w:表示不用控制台窗口,使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)
  • -c:表示打开控制台窗口,使用控制台子系统执行,当程序启动的时候会打开命令行(默认)(只对 Windows 有效)
  • -i:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)

注意的是,如果是打包QT5的界面,在其他电脑使用,还需要拷贝QT5的platforms,放到其他电脑(路径随意),然后像上面步骤一样添加环境变量,重启电脑,让环境变量生效。


©2018 - Felicx 使用 Stellar 创建
总访问 113701 次 | 本页访问 326
共发表 83 篇Blog · 总计 127.5k 字