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文件所在的目录
posted @   越自律越自由  阅读(1863)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示