python 虚拟环境 与 pyinstaller 打包 exe
1 pip list 和pip freeze的区别
- pip list # 查看已安装的依赖包
pip freeze # 冻结当前环境的依赖包 - pip freeze 为什么比 pip list 的包少几个呢?
因为pip , wheel , setuptools 等包,是自带的而无法(un)install的。考虑到pip freeze的用途,所以这些包并没有显示。
2 虚拟环境的创建
-
虚拟环境中不重复安装标准库, 只包含第三方库.
-
python -m venv d:\venvdir\sun
会在d:\venvdir文件夹下,创建一个文件夹sun(虚拟环境)
python -m venv sun
会在当前目录下(cmd提示符可以看到), 创建一个文件夹sun(虚拟环境)
命令 python -m venv -h
查看venv命令帮助, --system-site-packages
选项使用原环境中的第三方库
- 虚拟环境文件夹里面的内容:
Lib\site-packages\
下, 存放安装的第三方库
Scripts\
下, python.exe pip.exe activate(mac系统激活虚拟环境用) activate.bat(windows系统激活虚拟环境用) deactivete.bat(退出虚拟环境)等等
- 保存和复制虚拟环境(不是虚拟环境也可以用):
pip freeze > requirements.txt
把安装模块的名字和版本号存放在文本文件中
pip install -r requirments.txt
安装文本文件中的模块
3 激活和退出虚拟环境
- cmd下,切换到虚拟环境Scripts文件夹下, 执行activate 命令, 提示符前面会有虚拟环境名字在括号中, 此时pip list 或者 pip freeze 就只局限在虚拟环境中了. 退出执行命令deactivate.
- cmd下,切换到虚拟环境Scripts文件夹下, 执行python命令, 不用激活, 现在的环境就是虚拟环境中
4 pycharm 虚拟环境
-
使用创建好的虚拟环境: pycharm新建项目, 用已有的解释器, 找到虚拟环境Scripts文件夹下的python.exe文件
-
自己创建虚拟环境:
新建项目, 使用新虚拟环境, 虚拟环境位置默认在项目位置文件夹下, 也可以把虚拟环境位置不放在项目文件夹下, 并勾选 可用于所有项目选项, 这样下一次新建项目, 在现有解释器里面可以看到这个虚拟环境, 并可以共用它.
5 pyinstaller 打包 exe文件
官网链接: http://www.pyinstaller.org/
-
安装:
在虚拟环境下, 安装好需要的模块,编写好项目后,安装pyinstaller模块
pip install pyinstaller
或者pip install -U pyinstaller
安装完毕后, python安装目录下 scripte文件夹下会增加一个pyinstaller.exe程序
-
生成exe文件:
pyinstaller -F test.py
(生成单文件的exe文件)
pyinstaller -D test.py
(生成多文件--一个目录)
打包成功会在.py文件同级目录下出现以下文件,dist里面即为打包好的.exe文件
-
pyinstaller 常用选项
-h 查看该模块的帮助信息 -F 产生单个的可执行文件 -D 产生一个目录(包括多个文件)作为可执行程序 -a 不包含Unicode字符集支持 -w 指定程序运行时不显示命令行窗口(仅对windows有效) -c 指定使用命令行窗口运行程序(仅对windows有效) -n 指定项目(产生的spec)名字,如果省略,默认第一个脚本的主文件名.
-
注意的问题:
生成了单文件exe, exe文件同目录下有需要读取的配置文件, 程序中配置文件路径问题.
os.path.abspath(__file__) # 这个路径不能用,因为exe文件运行时,需要把模块等文件释放到临时文件夹下,再运行. 这里得到的是临时文件夹路径
os.path.abspath(sys.argv[0]) # 这个得到exe文件的路径
os.path.dirname(os.path.abspath(sys.argv[0])) # 获得exe文件所在的目录
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)