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

之前我们介绍了如何使用嵌入式 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)的更多相关文章
- 使用cmd命令创建maven(web)项目+项目转换成IDEA项目+项目打包+Jetty运行Web项目
3条件:配置好环境 配置环境教程:https://www.cnblogs.com/weibanggang/p/9623705.html 第一步:查看版本信息,在cmd输入mvn –version,如果 ...
- maven打包 tomcat运行pom配置 或 打成jar包
maven打包 tomcat运行pom配置,同时还需要配置org.apache.tomcat.maven插件,这里省略. <groupId>com.company</groupId& ...
- Web项目也能一键打包Android、IOS
随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...
- Docker的镜像制作与整套项目一键打包部署
Dockerfile常用指令介绍 指令 描述 FROM 构建的新镜像是基于哪个镜像.例如:FROM centos:6 MAINTAINER 镜像维护者姓名或邮箱地址.例如:MAINTAINER Mr. ...
- Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试
一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...
- 使用jenkins一键打包发布vue项目
jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立 ...
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...
- Linux04 /创建虚拟环境、在linux环境运行Python项目
Linux04 /创建虚拟环境.在linux环境运行Python项目 目录 Linux04 /创建虚拟环境.在linux环境运行Python项目 1. 大体流程 2. linux环境安装python3 ...
- NOSDK--SDK一键打包及统一接入的实现(前言)
前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...
- 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。
问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (95)-- 算法导论9.2 4题
四.用go语言,假设用RANDOMIZED-SELECT 去选择数组 A=(3,2,9,0,7,5,4,8,6,1)的最小元素,给出能够导致 RANDOMIZED-SELECT最坏情况发生的一个划分序 ...
- Three.js中实现对InstanceMesh的碰撞检测
1. 概述 之前的文章提到,在Three.js中使用InstanceMesh来实现性能优化,可以实现单个Mesh的拾取功能 那,能不能实现碰撞检测呢?肯定是可以的,不过Three.js中并没有直接的A ...
- Record - Stirling Number / FK. & SK.
Part. 1 Stirling Number / FK. Def. 定义 \(\begin{bmatrix}n \\ m\end{bmatrix}\) 表示将 \(n\) 个元素分成 \(m\) 个 ...
- Go 复合类型之切片类型介绍
Go 复合类型之切片类型 目录 Go 复合类型之切片类型 一.引入 二.切片(Slice)概述 2.1 基本介绍 2.2 特点 2.3 切片与数组的区别 三. 切片声明与初始化 3.1 方式一:使用切 ...
- windows平板的开发和选型
今天谈一个老话题,windows系统的选型和开发.问题的起因是我们一个客户说,用安卓平板不安全,苹果系统不考虑,于是他们要用自认为安全的WIN7系统. 提到WINDOWS平台下的的平板系统,此事说来话 ...
- ensp小实验——浮动路由
依靠优先级来保证多路径的连通性. #AR1中<Huawei>u t m<Huawei>sys[Huawei]sys r1[r1]int g0/0/1 [r1-GigabitEt ...
- 数据结构与算法 | 哈希表(Hash Table)
哈希表(Hash Table) 在二分搜索中提到了在有序集合中查询某个特定元素的时候,通过折半的方式进行搜索是一种很高效的算法.那能否根据特征直接定位元素,而非折半去查找?哈希表(Hash Table ...
- InfiniBand 的前世今生
今年,以 ChatGPT 为代表的 AI 大模型强势崛起,而 ChatGPT 所使用的网络,正是 InfiniBand,这也让 InfiniBand 大火了起来.那么,到底什么是 InfiniBand ...
- 【日常收支账本】【Day05】编辑账本界面增加删除、更新记录功能——提高代码复用性
一.项目地址 https://github.com/LinFeng-BingYi/DailyAccountBook 二.新增 1. 增加删除记录功能 1.1 功能详述 点击删除按钮后,获取对应行的数据 ...
- Senparc 基础库全面适配 .NET 8.0
概要 Senparc 全家桶中的基础库已经全面适配 .NET 8.0,目前随着 .NET 8.0 的 RC 版本不断发布,对应的版本号也将同步进行更新,直到本月 Ignite 大会微软官方发布 .NE ...