首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python程序打包成exe文件

Python程序打包成exe文件

作者头像
LuckySec
发布于 2022-11-02 14:32:03
发布于 2022-11-02 14:32:03
2.3K0
举报
文章被收录于专栏:LuckySec网络安全LuckySec网络安全

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 安装

使用如下命令进行安装

代码语言:javascript
复制
pip install pipenv
# 或者
python2 -m pip install pipenv
# 或者
python3 -m pip install pipenv

检测是否安装成功

代码语言:javascript
复制
pipenv --version

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

代码语言:javascript
复制
ValueError: Not a valid python path: 'D:/tools/python27/Scripts/python.exe'

解决办法就是降低pipenv版本

代码语言:javascript
复制
pip install pipenv==2018.10.13

0x04 pipenv 命令

1.创建虚拟环境
代码语言:javascript
复制
pipenv --two  # 创建当前系统的python2版本的虚拟环境
pipenv --three # 创建当前系统python3版本的虚拟环境
2.查看相关信息
代码语言:javascript
复制
pipenv --where # 查看项目位置
pipenv --venv # 查看虚拟环境位置
pipenv --py # 查看解释器信息
3.激活虚拟环境
代码语言:javascript
复制
pipenv shell # 激活当前项目的虚拟环境
4.安装/卸载依赖包到虚拟环境

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

代码语言:javascript
复制
阿里云: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,并替换国内源:

代码语言:javascript
复制
[[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文件默认是用官方源,导致下载速度过慢,如果不换成国内源,安装卸载依赖包时会卡住,出现如下报错:

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

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

代码语言:javascript
复制
#安装依赖包
pipenv install 依赖包名
# 或者
pip install -r requirements.txt

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

# 查看已安装的依赖包结构
pipenv graph 
5.退出虚拟环境
代码语言:javascript
复制
exit
# 或者
exit()
6.删除虚拟环境
代码语言:javascript
复制
pipenv --rm # 删除当前项目的虚拟环境

0x05 打包成exe文件

创建虚拟环境

代码语言:javascript
复制
pipenv --three

进入虚拟环境

代码语言:javascript
复制
pipenv shell

安装pyinstaller

代码语言:javascript
复制
pipenv install pyinstaller

安装python程序依赖包

代码语言:javascript
复制
pipenv install 依赖包名

将python程序打包成exe可执行文件

代码语言:javascript
复制
pyinstaller -F 程序名.py

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

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 0x01 虚拟环境
  • 0x02 pipenv 简介
  • 0x03 pipenv 安装
  • 0x04 pipenv 命令
    • 1.创建虚拟环境
    • 2.查看相关信息
    • 3.激活虚拟环境
    • 4.安装/卸载依赖包到虚拟环境
    • 5.退出虚拟环境
    • 6.删除虚拟环境
  • 0x05 打包成exe文件
  • 参考文章
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档