0x01 虚拟环境

虚拟环境是用于依赖项管理和项目隔离的python工具,它可以将python程序和pip包管理工具安装在本地的隔离目录中(非全局安装)。

在实际开发中,不同项目可能需要的python版本和项目的第三方依赖包的版本不同。在使用pyinstaller将python程序打包成exe可执行文件时,如果不将程序项目的依赖环境进行隔离,那么pyinstaller会自动将许多不必要的依赖包一起打包,会导致原本只要十几M大小的exe程序变成几十M甚至上百M,因此为了有效减少exe可执行文件的大小,必须使用虚拟环境进行隔离各程序项目环境。

0x02 pipenv 简介

pipenv发布于2017年1月,它是一种Python依赖管理工具,你可以把它看做是pip和virtualenv的组合体,它基于Pipfile的依赖记录方式,用于替代旧的记录方式requirements.txt。

pipenv会自动帮你管理虚拟环境和依赖文件,并且提供一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作。简而言之,它更方便、完善和安全。

0x03 pipenv 安装

使用如下命令进行安装

1
2
3
4
5
pip install pipenv
# 或者
python2 -m pip install pipenv
# 或者
python3 -m pip install pipenv

检测是否安装成功

1
pipenv --version

如果电脑上同时安装了python2和python3环境,则可能出现如下错误:

1
ValueError: Not a valid python path: 'D:/tools/python27/Scripts/python.exe'

解决办法就是降低pipenv版本

1
pip install pipenv==2018.10.13

0x04 pipenv 命令

1.创建虚拟环境

1
2
pipenv --two  # 创建当前系统的python2版本的虚拟环境
pipenv --three # 创建当前系统python3版本的虚拟环境

2.查看相关信息

1
2
3
pipenv --where # 查看项目位置
pipenv --venv # 查看虚拟环境位置
pipenv --py # 查看解释器信息

3.激活虚拟环境

1
pipenv shell # 激活当前项目的虚拟环境

4.安装/卸载依赖包到虚拟环境

在使用前要先更换pipenv的国内源,可选国内源如下:

1
2
3
4
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣:http://pypi.douban.com/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

打开pipfile,并替换国内源:

1
2
3
4
5
6
7
8
9
10
11
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple/" # 在这里替换成国内源
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.8"

在使用pipenv shell 激活环境时会自动在当前目录下生成一个pipfile文件。

由于pipenv中的pipfile文件默认是用官方源,导致下载速度过慢,如果不换成国内源,安装卸载依赖包时会卡住,出现如下报错:

1
2
3
4
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
# 执行到这里会长时间卡住......
pipenv.patched.notpip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

更换完国内源后,就可以正常安装卸载依赖包了

1
2
3
4
5
6
7
8
9
10
#安装依赖包
pipenv install 依赖包名
# 或者
pip install -r requirements.txt

# 卸载依赖包
pipenv uninstall 依赖包名

# 查看已安装的依赖包结构
pipenv graph

5.退出虚拟环境

1
2
3
exit
# 或者
exit()

6.删除虚拟环境

1
pipenv --rm # 删除当前项目的虚拟环境

0x05 打包exe程序

创建虚拟环境

1
pipenv --three

进入虚拟环境

1
pipenv shell

安装pyinstaller

1
pipenv install pyinstaller

安装python程序依赖包

1
pipenv install 依赖包名

将python代码打包成exe可执行文件

1
pyinstaller -F 程序名.py

执行成功后会在当前目录下生成dist目录,打包好的exe程序就在其中。

参考文章