Python直接復(fù)制已有的venv虛擬環(huán)境以創(chuàng)建新的虛擬環(huán)境過(guò)程
1.軟件環(huán)境
Windows10教育版64位Python3.10.6
2.問(wèn)題描述
哎,深度學(xué)習(xí)的環(huán)境配置一直是個(gè)問(wèn)題,特別是現(xiàn)在多模態(tài)的模型要求更多的包,更多的模型文件。因此怎么移植到其他地方更是一個(gè)問(wèn)題!
傳統(tǒng)方法可能就是使用pip freeze和pip install命令來(lái)依次安裝requirements.txt中的包。
這樣在我看來(lái)可能在某些情況下不適用:
- 單位的網(wǎng)速實(shí)在太慢了(如悲慘的我~~),只有
2MB/S,嚴(yán)重影響了pip install的速度; - 有的地方是不能聯(lián)網(wǎng)的,比如涉密環(huán)境(還是悲慘的我)~~,遭老罪咯!
那么,有沒(méi)有辦法可以直接將已有的venv環(huán)境利用起來(lái),而不是重新pip安裝一篇之前已經(jīng)安裝好的包?
這個(gè)時(shí)候可能有些同志就想起了,我直接將已有的venv環(huán)境復(fù)制到其他地方不就行了嗎?
因?yàn)橹苯訌?fù)制過(guò)去,雖然你能使用\venv\Scripts\activate激活虛擬環(huán)境,但你的環(huán)境其實(shí)指向的還是老環(huán)境的python環(huán)境,不信我們看:
直接激活新環(huán)境的虛擬環(huán)境,然后輸入where python:

注:
- 我這里已有的
venv環(huán)境位于:E:\Code\Python\Git\stable-diffusion-webui - 新的
venv環(huán)境位于:E:\Code\Python\Git\kohya_ss
特別是如果你使用where pip命令,返回的路徑是你新venv的路徑:

但實(shí)際pip依然是老venv中的pip:

這意味著你如果要在新的環(huán)境安裝其他版本的軟件包,修改的卻是老版本的venv軟件包,這樣還可能導(dǎo)致老的venv因?yàn)榘鼪_突而無(wú)法使用!
結(jié)果你復(fù)制半天復(fù)制了個(gè)寂寞,還白白浪費(fèi)了硬盤(pán)空間!
3.解決方法
這其實(shí)是因?yàn)槟愦直┑膶⒗檄h(huán)境復(fù)制過(guò)來(lái),其中文件中的指向依然是老環(huán)境,因此,我們只需要將這些文件中的路徑指向新環(huán)境即可!
3.1.方法1:先復(fù)制所有軟件包,然后直接修改路徑指向
1.將venv\pyvenv.cfg文件內(nèi)的home修改為新venv的安裝路徑:

如我這邊使用conda安裝的python,就直接將紫框中的內(nèi)容修改為:E:\Code\Python\Git\kohya_ss\conda\py3106。
如果你是獨(dú)立下載python安裝包,那就填入python的安裝路徑!
2.修改venv\Scripts\activate中的VIRTUAL_ENV指向新的venv路徑

如我這邊就修改為:
VIRTUAL_ENV="E:\Code\Python\Git\kohya_ss\venv"
3.修改venv\Scripts\activate.bat中的VIRTUAL_ENV指向新的venv路徑

如我這邊就修改為:
set VIRTUAL_ENV=E:\Code\Python\Git\kohya_ss\venv
這個(gè)時(shí)候可以看到我們的python指向我們的新venv了

4.重新安裝pip(一定要重新安裝!!!!!!!!!!!!!不然pip安裝包還是指向老環(huán)境,如果不重新安裝只能在前面加python -m才會(huì)在新環(huán)境中安裝包)
首先激活新venv,然后卸載新環(huán)境中的舊pip:
python -m pip uninstall pip
然后重新安裝pip, 這個(gè)時(shí)候你可以選擇去官網(wǎng)下載pip安裝包進(jìn)行,但是這樣感覺(jué)有點(diǎn)太麻煩了,推薦直接使用如下命令安裝:
python -m ensurepip --default-pip
注意:如果你的python版本太老了,可能是不支持ensurepip的,貌似python3.4以上版本才支持。
如果你使用的python版本低于3.4甚至是py2,那么你需要使用get-pip.py 腳本文件(https://bootstrap.pypa.io/get-pip.py,進(jìn)去根據(jù)你自己python的版本)來(lái)手動(dòng)安裝 pip
如果選擇錯(cuò)版本可能會(huì)報(bào)錯(cuò):
ERROR: This script does not work on Python 3.6 The minimum supported Python version is 3.7. Please use https://bootstrap.pypa.io/pip/3.6/get-pip.py instead.
![]()
并升級(jí)到最新版本:
python -m pip install --upgrade pip
這個(gè)時(shí)候就可以看到pip已經(jīng)指向我們的新venv了,where pip和pip --version指向的路徑也相同了:


3.2.方法2:先將Python解釋器中的標(biāo)準(zhǔn)庫(kù)文件復(fù)制到新的虛擬環(huán)境中,然后再?gòu)?fù)制所有軟件包
1.將Python解釋器中的標(biāo)準(zhǔn)庫(kù)文件復(fù)制到新的虛擬環(huán)境中
激活老環(huán)境,然后使用如下命令將Python解釋器中的標(biāo)準(zhǔn)庫(kù)文件復(fù)制到新的虛擬環(huán)境中:
python -m venv --copies E:\Code\Python\Git\test\venv
2.復(fù)制所有軟件包到新的venv
直接復(fù)制老環(huán)境下的venv\Lib\site-packages文件夾到新環(huán)境下的E:\Code\Python\Git\test\venv\Lib\site-packages
注:
- 可以先將新環(huán)境下的
venv\Lib\site-packages刪除再?gòu)?fù)制 - 如果你是老環(huán)境中單獨(dú)使用
conda來(lái)創(chuàng)建了python,需要按方法1中所說(shuō)的,將venv\pyvenv.cfg文件內(nèi)的home修改為新venv的安裝路徑
這種方法較為簡(jiǎn)單,都不容易改指向路徑:

3.3.方法3:使用virtualenv-clone進(jìn)行克隆
假設(shè)你要復(fù)制的虛擬環(huán)境是E:\Code\Python\Git\test\venv1,要?jiǎng)?chuàng)建的新虛擬環(huán)境是E:\Code\Python\Git\test2\venv2,那么你可以使用這個(gè)命令:
virtualenv-clone E:\Code\Python\Git\test\venv1 E:\Code\Python\Git\test2\venv2
然后你可以用文本編輯器打開(kāi)E:\Code\Python\Git\test2\venv2中的activate腳本,把里面的$VIRTUAL_ENV變量改成E:\Code\Python\Git\test2\venv2
但是這個(gè)方法貌似在Windows系統(tǒng)下有一些兼容性問(wèn)題,比如不支持Python 3.8以上的版本,或者不支持某些參數(shù),所以慎用?。?/p>
4.結(jié)果預(yù)覽
現(xiàn)在你的新老環(huán)境已經(jīng)完全隔離,安裝和更新操作互不影響,最主要的是不用聯(lián)網(wǎng)重頭pip install安裝了!
?總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python Selenium中常用的元素定位方法總結(jié)
在Web自動(dòng)化測(cè)試中,元素定位是一項(xiàng)非常重要的技術(shù),Python Selenium提供了各種元素定位方法,可以幫助我們定位頁(yè)面上的元素并與之交互,本文將詳細(xì)介紹Python Selenium中常用的元素定位方法,并提供實(shí)例代碼,需要的朋友可以參考下2023-11-11
python實(shí)現(xiàn)BackPropagation算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)BackPropagation算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
django 前端頁(yè)面如何實(shí)現(xiàn)顯示前N條數(shù)據(jù)
這篇文章主要介紹了django 前端頁(yè)面如何實(shí)現(xiàn)顯示前N條數(shù)據(jù)。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
對(duì)Python中9種生成新對(duì)象的方法總結(jié)
今天小編就為大家分享一篇對(duì)Python中9種生成新對(duì)象的方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python連接MySQL報(bào)錯(cuò):缺少cryptography庫(kù)的解決辦法
這篇文章主要介紹了Python連接MySQL報(bào)錯(cuò):缺少cryptography庫(kù)的兩種解決辦法,分別是安裝cryptography庫(kù)和修改MySQL用戶認(rèn)證方式,兩種方法各有適用場(chǎng)景,需要的朋友可以參考下2026-06-06
人臉檢測(cè)實(shí)戰(zhàn)終極之OpenCV+Python實(shí)現(xiàn)人臉對(duì)齊
這篇文章主要是為了演示如何使用 OpenCV、Python 和面部標(biāo)志從而實(shí)現(xiàn)對(duì)齊人臉。文中示例代碼對(duì)我們的工作或?qū)W習(xí)有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12
pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法
今天小編就為大家分享一篇pyinstaller打包單個(gè)exe后無(wú)法執(zhí)行錯(cuò)誤的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06

