之前我们介绍了如何使用嵌入式 Python3 环境给项目制作一键整合包,在使用嵌入式 Python 环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的 Python 环境。虚拟环境允许我们在同一台计算机上的不同项目中使用不同的 Python 版本和软件包,而不会相互干扰。

本次我们利用Python3自带的虚拟环境(venv)功能来给项目制作一键整合包。

创建虚拟环境

首先确保本地环境已经安装好了Python3开发环境,如果没有,请移步:一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境,囿于篇幅,这里不再赘述。

随后在克隆自己的项目,用于打包,这里我们以Bert-vits2-2.3的项目为例子:

git clone https://github.com/v3ucn/Bert-vits2-V2.3

随后进入项目的根目录:

cd Bert-vits2-V2.3

正常流程下我们会直接执行pip install -r requirements.txt在当前环境下安装依赖。

但是我们现在不使用当前开发环境,而是使用虚拟环境。

首先创建一个虚拟环境的工作目录:

mkdir venv

随后进入venv目录

cd venv

创建独立的虚拟环境:

python -m venv .

该命令python -m venv <目录位置> 可以创建一个独立的Python3运行环境。venv目录里面有python3、pip3等可执行文件,实际上是链接到Python系统目录的软链接。

此时,执行激活命令就可以进入该虚拟环境venv:

E:\work\Bert-vits2-2.3\venv>.\Scripts\activate  

(venv) E:\work\Bert-vits2-2.3\venv>  

可以看到,当前命令行的前缀有一个(venv)代表我们现在处于虚拟环境之中。

注意该虚拟环境和当前系统的Python3环境是隔离的。

我们也可也执行命令退出虚拟环境venv:

(venv) E:\work\Bert-vits2-2.3\venv>.\Scripts\deactivate.bat
E:\work\Bert-vits2-2.3\venv>

通过deactivate命令可以推出虚拟环境。

用虚拟环境venv给项目安装依赖

创建好了虚拟环境之后,我们就可以给当前的项目(Bert-vits2-2.3)安装依赖了:

.\venv\Scripts\pip.exe install -r .\requirements.txt

注意,这里所有的依赖文件都会安装到虚拟环境目录,即venv。

如果愿意,也可以执行命令来升级虚拟环境的pip软件:

.\venv\Scripts\python.exe -m pip install --upgrade pip

完成依赖的安装以后,可以执行命令来查看项目的依赖列表:

E:\work\Bert-vits2-2.3>.\venv\Scripts\pip.exe list
Package Version
------------------ ------------
certifi 2023.11.17
charset-normalizer 3.3.2
colorama 0.4.6
coloredlogs 15.0.1
filelock 3.13.1
flatbuffers 23.5.26
ftfy 6.1.3
humanfriendly 10.0
idna 3.6
imageio 2.33.1
Jinja2 3.1.2
lazy_loader 0.3
MarkupSafe 2.1.3
mpmath 1.3.0
networkx 3.2.1
numpy 1.23.5
onnx 1.14.0
onnxruntime-gpu 1.16.2
opencv-python 4.7.0.72
packaging 23.2
Pillow 9.5.0
pip 23.0.1
protobuf 4.23.2
pyreadline3 3.4.1
PyWavelets 1.5.0
regex 2023.12.25
requests 2.31.0
scikit-image 0.21.0
scipy 1.11.4
setuptools 65.5.0
sympy 1.12
tifffile 2023.12.9
tk 0.1.0
torch 2.0.1+cu118
torchaudio 2.0.2+cu118
torchvision 0.15.2+cu118
tqdm 4.66.1
typing_extensions 4.9.0
urllib3 2.1.0
wcwidth 0.2.12

也可以通过pip的show命令来查看依赖的具体位置:

E:\work\Bert-vits2-2.3>.\venv\Scripts\pip.exe show numpy
Name: numpy
Version: 1.23.5
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: e:\work\Bert-vits2-2.3\venv\lib\site-packages
Requires:
Required-by: imageio, onnx, onnxruntime-gpu, opencv-python, PyWavelets, scikit-image, scipy, tifffile, torchvision

可以看到,这里numpy库就已经被安装到了e:\work\Bert-vits2-2.3\venv\lib\site-packages目录。

随后,我们执行项目中的脚本就可以用虚拟环境来执行,如:

.\venv\Scripts\pip.exe webui.py

如果不想通过命令执行,也可以编写bat脚本:

@echo off
chcp 65001 call venv\python.exe webui.py @echo 启动完毕,请按任意键关闭
call pause

至此我们就完成了Bert-vits2-2.3虚拟环境依赖的安装,只需把Bert-vits2-2.3目录压缩,就拿到了一个Bert-vits2-2.3项目的整合包。

嵌入式embed和虚拟环境venv区别

嵌入式embed Python 通常用于将 Python 解释器嵌入到其他应用程序中,以便在应用程序中执行 Python 代码。这种方法常见于需要在应用程序中动态执行脚本或扩展功能的情况。例如,游戏开发中的脚本系统、自定义插件或扩展功能的实现,都可能会使用嵌入式 Python。嵌入式 Python 的优势在于它的轻量级和灵活性,可以根据应用程序的需求进行定制,不需要包含完整的 Python 安装。

虚拟环境venv则用于在同一台计算机上管理多个 Python 项目的依赖关系。每个项目可以有自己独立的虚拟环境,这样可以避免不同项目之间的依赖冲突和版本问题。虚拟环境的应用场景包括:在开发多个项目时,每个项目可以有自己独立的依赖包和 Python 版本;在部署应用程序时,可以确保部署环境与开发环境一致;在测试和维护项目时,可以隔离不同项目的依赖,方便管理和维护。

结语

嵌入式 Python 适用于需要将 Python 作为应用程序的一部分嵌入到其他系统中的场景,而虚拟环境适用于需要在同一台计算机上管理多个 Python 项目的场景。两者在项目开发中有着不同的应用目的和优势,但在整合包制作领域,二者都可以完美实现项目整合包的制作和更新。

一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)的更多相关文章

  1. 使用cmd命令创建maven(web)项目+项目转换成IDEA项目+项目打包+Jetty运行Web项目

    3条件:配置好环境 配置环境教程:https://www.cnblogs.com/weibanggang/p/9623705.html 第一步:查看版本信息,在cmd输入mvn –version,如果 ...

  2. maven打包 tomcat运行pom配置 或 打成jar包

    maven打包 tomcat运行pom配置,同时还需要配置org.apache.tomcat.maven插件,这里省略. <groupId>com.company</groupId& ...

  3. Web项目也能一键打包Android、IOS

    随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...

  4. Docker的镜像制作与整套项目一键打包部署

    Dockerfile常用指令介绍 指令 描述 FROM 构建的新镜像是基于哪个镜像.例如:FROM centos:6 MAINTAINER 镜像维护者姓名或邮箱地址.例如:MAINTAINER Mr. ...

  5. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  6. 使用jenkins一键打包发布vue项目

    jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立 ...

  7. cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...

  8. Linux04 /创建虚拟环境、在linux环境运行Python项目

    Linux04 /创建虚拟环境.在linux环境运行Python项目 目录 Linux04 /创建虚拟环境.在linux环境运行Python项目 1. 大体流程 2. linux环境安装python3 ...

  9. NOSDK--SDK一键打包及统一接入的实现(前言)

    前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...

  10. 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。

    问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...

随机推荐

  1. 「codeforces - 868F」Yet Another Minimization Problem

    link. 值域分治优化决策单调性 DP 的 trick.朴素做法 trivial,不赘述. 考虑求取一个区间 \([l,r]\) 的 DP 值.先搞定在 \(m=\lfloor\frac{l+r}{ ...

  2. Solution -「洛谷 P3600」随机数生成器

    Desciption Link. 给定一个值域在 \([1,x]\) 的长度为 \(n\) 的序列(由随机数构成),求给定一组区间中的最小值的最大值的期望. Solution 记: \[w=\max\ ...

  3. oracle-组合索引字段位置与查询效率之间的关系

    Oracle索引组合字段的位置不同,当查询条件不能覆盖索引时,影响查询效率.查询条件是不是索引字段的第一列影响执行计划,实验验证 实验1:查询条件为组合索引的第一列--创建测试表 create tab ...

  4. 开发app软件成本计算参考

    目录 1. 设计成本 2. 前端开发成本 3. 后端开发成本 4. 测试成本 5. 上架试运营成本 app软件开发已成为人们生活中不可或缺的一部分.无论是在娱乐.通讯.信息.健康等方面,都有数不清的a ...

  5. WPF 笔迹算法 从点集转笔迹轮廓

    本文将告诉大家一些笔迹算法,从用户输入的点集,即鼠标轨迹点或触摸轨迹点等,转换为一个可在界面绘制显示笔迹画面的基础数学算法.尽管本文标记的是 WPF 的笔迹算法,然而实际上本文更侧重基础数学计算,理论 ...

  6. P4899 [IOI2018] werewolf 狼人 题解

    P4899 [IOI2018] werewolf 狼人 题解 题目描述 省流: \(n\) 个点,\(m\) 条边,\(q\) 次询问,对于每一次询问,给定一个起点 \(S\) 和终点 \(T\) , ...

  7. k8s Rabbitmq安装部署

    安装方式 kubectl apply -f rabbitmq.yaml -n yunda-dev-cache rabbitmq.yaml ##创建PV # 注意更换存储方式 --- apiVersio ...

  8. 浅谈斜率优化DP

    前言 考试 T2 出题人放了个树上斜率优化 DP,直接被同校 OIER 吊起来锤. 离 NOIP 还有不到一周,赶紧学一点. 引入 斜率 斜率,数学.几何学名词,是表示一条直线(或曲线的切线)关于(横 ...

  9. python列表排序之sort(),sorted()和reverse()

    sort() 正序 sort()可以按字母的顺序来对列表进行永久性排序(改变列表自身的排序): list_1 = ['one', 'two', 'three', 'four', 'five'] pri ...

  10. 前端技术探秘-Nodejs的CommonJS规范实现原理

    了解Node.js Node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaSc ...