主要是记录一个 用虚拟环境打包的坑, Virtualenv 不如自带的 venv 香.

需求

最近要对一个 tkinter 小程序打包为 exe. 毕竟业务人员是绝对不可能安装开发环境的. 不论你怎么说它如何强大.

代码是多文件夹的, 写了一个主程序 main.py 来控制主逻辑. 即要对它进行打包 exe. 百度了一下, 主流的方式用第三方库 pyinstaller. 然后创建虚拟环境, 打包, 怎么也打不了, 心态崩溃了好几天...

采坑 Virtualenv

之前有写过一点 web, 第一步就是要创建一个虚拟环境来开发嘛, 将其与其他的环境隔离开来. 因为不涉及打包exe这种骚操作, 搞完直接部署服务器. 因此参考百度的, 当时 99% 都是说 win下用第三方库 Virtualenv 来创建虚拟环境. web 倒是没呀问题, 可一打包就会发现, 虚拟环境跟其他环境, 根本就没有隔离开.

当然也回顾一下流程, 通用的嘛.

首先, 安装第三方库 Virturalenv

在 cmd 下,

pip install virtualenv

如果已经装了, 或想重装, 可以删掉. pip uninstall virtualenv

然后, 创建虚拟环境

virtualenv ENV

这会创建ENV/lib/ENV/includeENV/bin(Windows系统下是ENV/Scripts)几个文件夹,它们共同构成了一个完整的Python环境。在ENV/lib/中有pip等工具用于安装第三方包,它们和系统中已安装的Python互不关联。

这里有一个额外参数--system-site-packages,如果在创建虚拟环境的时候使用该参数,虚拟环境会继承主环境的所有第三方包。如果你希望虚拟环境和主环境独立,就不要用这个参数。操作上, 就是对文件目录的一个管理而已.

要激活创建的虚拟环境,需要执行虚拟环境其中的activate脚本:(win 下 在 Scripts 目录下有一个 activate.bat) 的脚本文件, 执行它就进入了虚拟环境了.

# cd 到 Scripts 目录下 (目录路径那, 键入 cmd 即可快速进入)
activate.bat # 退出
deactivate.bat

非常简单对吧. 然后就死活 环境打包失败, 困扰了好久, 我一直以为是 打包库的bug, 可见, 解决问题最难的地方是, 一开始方向就错了.

反复试错, 后来发现, 打包的时候, 在虚拟环境中, 会莫名其妙关联到其它环境的包, 因此才想到, 肯定是 虚拟环境的问题.

反复抓狂....

自带的 venv 虚拟环境

后来, 小王告诉我, 干嘛不用 自带的 venv 虚拟环境, 真香.

3 行命令创建及进入虚拟环境.

假设呢, 我要在我的 D 盘下创建一个虚拟环境, 名为 my_venv.

python - m venv my_venv

然后进入进入到 my_venv 下的 Scripts 文件夹下, 运行 activate.bat 即可.

cd my_venv/scripts

activate.bat

就这 3行命令就搞定了, 不需要装其他的包和配置啥环境变量, 是真的香.

退出虚拟环境: deactivate.bat

删除虚拟环境: 删除文件夹即可. 最为简单粗暴.

配置虚拟环境

就是环境需要的包安装, 通常都是写完一个 requirements.txt 的文件.

pip install -r requirements.txt

当然, 一个个地安装也可以.

环境已好下, 生成 requirements.txt 文件: 终端: pip freeze > ./requirements.txt 就是 ">" 这管道命令.

通过本地安装: setup.py install (通常下载的包, 顶层是有一个 setup.py 的文件的.

进入项目打包 exe

这个操作是非常自然的. 安装, 然后一行命令打包.

pip install pyinstaller

然后对项目的 main.py 所在目录层级下, 进行打包.

pyinstaller -F -w main.py

-F 是打为一个文件, 在执行完后, 生成的 dist 目录下, 有一个 main.exe 的文件, 拷贝到哪都可以运行.

直接打呢, 会有很多文件, 然后找到main.exe, 创建个快捷方式来访问, 这两种都是我经常的方式.

-w : 是运行时显示黑窗口, 第一次会加上, 相等于是一个 debug 版本. 没问题再去掉.

测试没有问题了. 再打一版本.

pyinstaller -F main.py

如果有图片资源等, 要另外放到相应的文件下, 这里不上图和操作了. 主要这篇是为了记录采坑和记住这几个命令, 毕竟, 网上的很多所谓答案, 都不如自己记一笔的好.

小结

  • 优先用内置模块, venv,还有像之前的, 一行实现 httpserver传文件等. 内置的才是真香, 操作简单, 效率高.

  • 熟练用 pyinstaller 这类打包 exe 工具. 怎么说了. 学会了, 发现用 python偶尔写桌面程序给别人用还 挺有意思.

  • 写代码真的就是个采坑的过程... 学之愈深, 坑也愈多, 其乐无穷.

Win 下 创建 Python 虚拟环境的更多相关文章

  1. windows下创建Python虚拟环境

    windows下创建Python虚拟环境 说明 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv ...

  2. Windows下创建Python虚拟环境的两种方法:

    在实际的项目开发中,我们会根据自己的需求去下载各种相应的框架库,但是每个项目可能使用的库不一样,或者版本不一样等等等.为了避免这些因素对我们的项目造成一些不必要的影响,我们可能需要来回的切换或者装卸等 ...

  3. Anaconda+用conda创建python虚拟环境

    Anaconda+用conda创建python虚拟环境 Anaconda与conda区别 conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理.包管理与pip的使用类似,环境 ...

  4. Windows下安装Python虚拟环境

    Windows下安装Python虚拟环境 虚拟环境安装 需求概要 "虚拟环境"是从电脑独立开辟出来的环境.就好比我们生活中的橱柜中,会把酱油放在一个瓶子里,把醋放在另外一个瓶子里, ...

  5. 用conda创建python虚拟环境

    1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)conda list 查看安装了哪些包. 2)con ...

  6. 创建 python 虚拟环境

    conda 创建环境 conda 可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理.包管理与 pip 的使用类似,环境管理则允许用户方便地安装不同版本的 python 并可以快速切 ...

  7. Linux创建Python虚拟环境

    Linux创建Python虚拟环境 安装 pip install virtualenv 基本使用 为一个工程创建一个虚拟环境: $ cd my_project $ virtualenv venv #v ...

  8. 如何在Ubuntu14.04中创建Python虚拟环境

    在Ubuntu14.04中安装Python相对比较容易些,最简单的安装方法就是apt-get安装了,具体的教程可以戳这篇文章:在Ubuntu14.04中如何安装Python3和切换py2和py3环境. ...

  9. windows环境下搭建python虚拟环境及离线移植

    以python3.6为例 ①安装virtualenv: #pip安装之后在D:\Python36\Scripts目录下可以看到多了一个virtualenv.exe可执行文件pip install vi ...

  10. Anaconda用conda创建python虚拟环境

    Anaconda用conda创建python虚拟环境 一.简介 conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理.包管理与pip的使用类似,环境管理则允许用户方便地安装不 ...

随机推荐

  1. [NOIP2018] 旅行 题解

    明显要以 \(1\) 为起点. 原图是树 这种情况下,走路不能回头,只能用 \(dfs\) 的思路走.当然肯定每次都走较小的那棵子树,\(vector\) 存图后排序即可达到这种效果. 时间复杂度 \ ...

  2. 库卡机器人KR500维修保养

    随着现代工业自动化,KUKA库卡机器人以其卓越的性能.灵活的操作和高效的产出而备受赞誉.然而,为了确保机器人的持续稳定运行和延长使用寿命,应联系子锐机器人维修对库卡机器人保养至关重要. 一.库卡机器人 ...

  3. 执行shell脚本报错:Syntax error: word unexpected (expecting "in")

    检查语法无误后,考虑是脚本文件换行符的问题. vs创建的文件默认以CRLF(0D0A)换行. 然而对于换行,windows用CRLF(0D0A)表示,linux用LF(0A)表示. 切换脚本文件换行符 ...

  4. LCP 1. 猜数字

    地址:https://leetcode-cn.com/problems/guess-numbers/ <?php /** 小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个 ...

  5. PPT 技巧&网站

    样机生成网站 https://mockuphone.com/device?type=computer CTROL+L 演示生成荧光笔 3.如何内嵌字体 文件->选项->保存->勾选潜 ...

  6. 线上测试木舟物联网平台之如何通过HTTP网络组件接入设备

    一.概述 木舟 (Kayak) 是什么? 木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的, 平台包含了微服务和物联网平台.支持异步和响应式编程开发,功能包含了物模 ...

  7. linux生成ssh密钥

    前言 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口 ...

  8. Mac下打开进入/usr/local等隐藏目录

    教程 Mac下/usr/local目录默认是对于Finder是隐藏,如果需要到/usr/local下去,打开Finder,然后使用command+shift+G,在弹出的目录中填写/usr/local ...

  9. oracle的IP访问列表

    Windows版本Oracle 19c. 在sqlnet.ora中添加下面语句 tcp.validnode_checking=yes tcp.invited_nodes=(127.0.0.1,132. ...

  10. HoloLens 2 开发推荐书籍

    博客地址:https://www.cnblogs.com/zylyehuo/ 书名 HoloLens 2开发入门精要--基于Unity和MRTK http://www.tup.tsinghua.edu ...