怎么使用嵌套虚拟环境实现项目部署之virtualenv嵌套conda绕开安装环境检测实现.venv部署facefusion

#工作记录

一、前言

嵌套虚拟环境本来是不建议的一种方法,这种嵌套虚拟环境的使用有一定特殊性,但在一些特别的使用场景下,嵌套虚拟环境的使用非常有用。

二、嵌套虚拟环境:

(一)conda嵌套virtualenv

该嵌套环境本质上是操作conda的base环境。如果需要这种嵌套,请切换到其他环境进行操作。

(一)virtualenv嵌套conda

该嵌套环境本质上是操作.venv本地虚拟环境。

(三)其他

其他嵌套环境暂不在此记录

(四)注意:

以下记录所属平台为Windows11 X64位系统,intel处理器,NVIDIA显卡,DDR5内存。

不同平台可能嵌套虚拟环境的实现机制不一样,实现嵌套的软件也会不一样。但原理可供参考。

三、使用举例

(一)conda嵌套virtualenv

conda嵌套virtualenv比较容易实现,需要用经过conda初始化的powershell终端导航到项目本地目录,该本地目录需要有一个virtualenv虚拟环境(.venv)。

用powershell激活相关conda虚拟环境后再激活本地virtualenv虚拟环境(.venv)就能实现

复制代码
为您的终端初始化 conda:
conda init --all

#激活conda虚拟环境
conda activate 环境名

#激活virtualenv虚拟环境(.venv)
.venv\Scripts\activate

(二)virtualenv嵌套conda

virtualenv嵌套conda比较不好实现,需要用未经过conda初始化的powershell终端(最好使用powershell预览版,它支持更多更新的功能)导航到项目本地目录,该本地目录需要有一个virtualenv虚拟环境(.venv),先激活.venv虚拟环境 ,然后再激活conda虚拟环境(不事先激活)。

复制代码
#激活virtualenv虚拟环境(.venv)
.venv\Scripts\activate

#激活conda虚拟环境
conda activate 环境名

用powershell(预览版)激活本地virtualenv虚拟环境(.venv)后,再激活相关conda虚拟环境就能实现。

四、使用案例:

在GitHub上,有些开源项目指定要求使用conda虚拟环境 或者 指定virtualenv虚拟环境,有些时候出于种种原因,我们会不想按项目网页指导的流程进行部署,而少数开源项目在不修改代码的情况下,无法实现非官方指定的虚拟环境进行部署,像这种情况下就需要了解嵌套虚拟环境。

拿一个开源项目举例:

facefusion

一个道德合规的换脸开源项目,这个例子比较经典,可以用来说明virtualenv嵌套conda的实践

https://github.com/facefusion/facefusion.git

该项目在官方的安装指导文档中,建议使用conda虚拟环境,python==3.12

但我只想用本地 .venv虚拟环境部署,可是部署时总是失败,提示conda环境未激活。如果我们不想修改代码就实现.venv虚拟环境部署,就需要用到virtualenv嵌套conda虚拟环境来绕过安装检测。

因此就有了使用嵌套虚拟环境部署的方法:

**思路:**我要实现.venv虚拟环境的部署,并且软件包全部安装到.venv虚拟环境,但又要绕过项目代码的conda安装环境检测。

1、用PyCharm在项目本地创建一个.venv虚拟环境:

关于.venv虚拟环境的创建,请参考:

Windows11系统下python虚拟环境管理独家心得-CSDN博客

2、然后进入终端先激活该环境,

3、然后再激活一个相同python版本的conda虚拟环境

上图可以看到已经进入virtualenv嵌套conda的虚拟环境

这里我新建了一个名为"facefusion"的同名conda虚拟环境,同样使用的python3.12版本。这里是为了演示用.venv绕过conda环境检测从而部署facefusion的方法,并不是为了多此一举而多此一举!

(本来是不同python版本的conda环境也行,只要是conda环境就行,但为了避免出现莫名错误,建议先在anaconda创建一个纯净的、与.venv虚拟环境中python版本相同的虚拟环境,部署完成后再删除该conda虚拟环境)

4、然后运行facefusion项目的安装脚本:

复制代码
python install.py --onnxruntime cuda

可以看到安装脚本已经在正确运行了,没有了之前.venv环境运行脚本时的错误提示。

可以看到安装脚本已经成功完成安装。

然后我们可以按提示升级一下venv环境中的pip(一般建议创建完环境后就先升级一下):

复制代码
python.exe -m pip install --upgrade pip

5、然后就可以用命令启动 facefusion了

复制代码
python facefusion.py run --open-browser

因为首次启动需要下载一些模型文件,而这些文件的下载要看网络状况而定,这里就不做等待了.

6、删除Anaconda中用于配合部署测试的conda虚拟环境

后续可以删除Anaconda中用于配合部署测试的facefusion虚拟环境了,只保留项目本地的.venv环境供项目使用就可以了。

小结

至此,用virtualenv嵌套conda虚拟环境部署facefusion项目就算完成了。

写在最后

conda嵌套virtualenv和virtualenv嵌套conda需要灵活使用,一般conda嵌套virtualenv不常用,而virtualenv嵌套conda则可以在特殊场景下发挥作用。

相关推荐
杰瑞学AI5 分钟前
在PyTorch中,对于一个张量,如何快速为多个元素赋值相同的值
人工智能·pytorch·python
hongjianMa1 小时前
【论文阅读】User Diverse Preference Modeling by Multimodal Attentive Metric Learning
论文阅读·python·推荐系统·多模态推荐
乖乖der1 小时前
python同步mysql数据
开发语言·python·mysql
渐消散2 小时前
人工智障玩游戏
python
Echo-J2 小时前
数据可视化(第4、5、6次课)
python·信息可视化·matplotlib·数据可视化
粉03213 小时前
利用Flask来实现留言板的基本操作
后端·python·flask
WW、forever3 小时前
【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)
开发语言·python·音视频
web150854159353 小时前
用 Python 模拟雪花飘落效果
开发语言·python·pygame
阿卡蒂奥4 小时前
PaddleOCR本地部署 (Python+Flask)
开发语言·python·flask
Dxy12393102166 小时前
DrissionPage ChromiumPage模式:浏览器自动化的高效利器
运维·python·自动化·drissionpage