主要是记录一个 用虚拟环境打包的坑, 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. hbase - [06] rowkey的设计

    HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位 ...

  2. Python - “人生苦短,我用Python”

    Python中的值(数据)类型 类型 描述 说明 数字(Number) 支持 整数(int) 浮点数(float) 复数(complex) 布尔(bool) 整数(int),如:10.-10 浮点数( ...

  3. sql 周岁计算

    select  FLOOR(DATEDIFF(DY, substring(身份证字段,7,4), GETDATE()) / 365.25)  age  from [表名]

  4. CF2043C Sums on Segments

    题意概要 一个数组,最多有一个数的绝对值不是 \(1\),求出所有可以得到的区间和. 思路 这里提供一个 数据结构优化查询前缀和最值 的做法. 最多有一个数的绝对值不是 \(1\),那我们可以先忽略掉 ...

  5. Arrays工具类教你优雅地管理数组数据

    数组专用工具类指的是 java.util.Arrays 类,基本上常见的数组操作,这个类都提供了静态方法可供直接调用.毕竟数组本身想完成这些操作还是挺麻烦的,有了这层封装,就方便多了. package ...

  6. Golang 入门 : 包名与导入路径

    math/rand包有一个Intn函数,可以生成一个随机数,所以我们需要导入math/rand.然后调用rand.Intn生成随机数. 等一下!Intn来自math/rand包,那为什么我们调用包的时 ...

  7. HTTP内容编码和HTTP压缩的区别

    HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的目的. 也可以使用其他的编码把内容搅乱 ...

  8. oracle 数据库服务名怎么查

    WINDOWS上,直接看 服务里的 服务名就好:Oracle SID Service ,中间的SID就是数据库服务的名称.LINUX系统下,输入env |grep SID 可以查看到,一般没换都是这个 ...

  9. 深度剖析 StarRocks 读取 ORC 加密文件背后的技术

    作者:vivo 互联网大数据团队 - Zheng Xiaofeng 本文介绍了StarRocks数据库如何读取ORC加密文件,包括基础概念以及具体实现方案.深入探讨了利用ORC文件的四层结构和三层索引 ...

  10. Ubuntu安装mosquitto并进行配置

    要在Ubuntu上安装Mosquitto并进行配置,你可以按照以下步骤进行操作: 打开终端. 更新软件包列表,使用以下命令: sudo apt update 安装Mosquitto包,使用以下命令: ...