Python程序打包成exe文件


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

使用如下命令进行安装

pip install pipenv
# 或者
python2 -m pip install pipenv
# 或者
python3 -m pip install pipenv

检测是否安装成功

pipenv --version

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

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

解决办法就是降低pipenv版本

pip install pipenv==2018.10.13

0x04 pipenv 命令

1.创建虚拟环境

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

2.查看相关信息

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

3.激活虚拟环境

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

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

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

阿里云: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,并替换国内源:

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

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

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

#安装依赖包
pipenv install 依赖包名
# 或者
pip install -r requirements.txt

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

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

5.退出虚拟环境

exit
# 或者
exit()

6.删除虚拟环境

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

0x05 打包成exe文件

创建虚拟环境

pipenv --three

进入虚拟环境

pipenv shell

安装pyinstaller

pipenv install pyinstaller

安装python程序依赖包

pipenv install 依赖包名

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

pyinstaller -F 程序名.py

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

参考文章


文章作者: LuckySec
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuckySec !
评论
 上一篇
未授权访问漏洞总结 未授权访问漏洞总结
这篇文章主要收集一些常见的未授权访问漏洞。未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
2020-12-30
下一篇 
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149) JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。2017年8月30日,厂商Redhat发布了一个JBOSS的反序列化远程代码执行漏洞通告。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。
2020-11-30
  目录