虛擬環(huán)境介紹
Python/ target=_blank class=infotextkey>Python 應用經(jīng)常需要使用一些包第三方包或者模塊,有時需要依賴特定的包或者庫的版本,所以不能有一個能適應所有 Python 應用的軟件環(huán)境,很多時候不同的 Python 應用所依賴的版本是沖突的,滿足了其中一個,另一個則無法運行,解決這一問題的方法是虛擬環(huán)境。虛擬環(huán)境是一個包含了特定 Python 解析器以及一些軟件包的自包含目錄,不同的應用程序可以使用不同的虛擬環(huán)境,從而解決了依賴沖突問題,而且虛擬環(huán)境中只需要安裝應用相關的包或者模塊,可以給部署提供便利。
虛擬環(huán)境并不是什么新技術,主要是利用了操作系統(tǒng)中環(huán)境變量以及進程間環(huán)境隔離的特性。
Python 處理虛擬環(huán)境的包有好幾種,conda用得比較多。
pip、Conda、virtualenv
pip 是最常用的包管理工具,通過 pip install <packagename> 命令格式來安裝軟件包,使用的是 pypi 軟件包源。安裝python自帶pip,或者通過 yum install python-pip 安裝。
conda 多用作科學計算領域的包管理工具,功能豐富且強大,使用的軟件包源是 Anaconda repository 和 Anaconda Cloud,conda 不僅支持 Python 軟件包,還可以安裝 C、C++ 、R 以及其他語言的二定制軟件包。除了軟件包管理外,還能提供相互隔離的軟件環(huán)境。安裝 Anaconda 自帶 conda。
virtualenv 是一個虛擬環(huán)境管理器,作為非數(shù)據(jù)科學領域的開發(fā)者來說是很實用的。它可以讓你每個項目甚至每個腳本配置一個自定義的Python解釋器環(huán)境,這最大的好處是可以不污染開發(fā)環(huán)境。可以通過 pip install virtualenv 安裝。
如果說venv是虛擬環(huán)境管理器,pip是包管理器,那么conda則是兩者的結合。
conda虛擬環(huán)境是獨立于操作系統(tǒng)解釋器環(huán)境的,即無論操作系統(tǒng)解釋器什么版本(哪怕2.7),我也可以指定虛擬環(huán)境python版本為3.6(見文章開頭所說原博客),而venv是依賴主環(huán)境的。
pip
安裝python
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6
刪除python
sudo apt-get remove --auto-remove python3.4
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
清空回收站命令:
sudo rm -rf ~/.local/share/Trash/*
conda 的使用
驗證及幫助
驗證conda已被安裝,打開“Anaconda Prompt”,conda --version
通過conda --help學習conda怎么使用
清理conda
清理 conda
conda clean -p //刪除從不使用的包
conda clean -t //刪除tar包
conda clean -a //刪除索引緩存,鎖定文件,未使用的緩存包和包
conda的虛擬環(huán)境管理
1. 顯示所有的虛擬環(huán)境:conda env list
(注意目錄:base 在基目錄,其它后天的環(huán)境在 envs 內(nèi)[C:anaconda3envs])
2. 創(chuàng)建一個名為 zlltest 環(huán)境,指定Python版本是3.8或2.7
conda create --name zlltest python=3.8
#conda create --name zlltest python=2.7
conda create --name zlltest python=3.7.1 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
3. 激活名為 zlltest 的環(huán)境
conda activate zlltest # windows
source activate zlltest # linux/mac
4. 切換環(huán)境
conda activate zlltest
5. 退出環(huán)境
deactivate #windows
source deactivate #linux
6. 刪除一個名為 zlltest 的環(huán)境
conda remove --name zlltest --all
7. 克隆oldname環(huán)境為newname環(huán)境
conda create --name newname --clone oldname
conda update -n base -c defaults conda
conda clean --packages && conda clean --all && conda update --al
conda的包管理
conda 的包管理功能是對pip的一種補充,如果當前已經(jīng)激活了某個Python環(huán)境,那么就可以在當前環(huán)境開始安裝第三方包。
conda list # 查看當前環(huán)境下已安裝的package
conda search numpy # 查找名為 numpy 的信息 package 的信息
conda install numpy # 安裝名為 numpy 的包
(conda install numpy 會自動安裝 mkl(intel 加速科學計算的包),而pip install numpy 則不會)
conda update numpy # 更新numpy 包
conda uninstall numpy # 卸載numpy 包
# -n指定環(huán)境 --channel指定源地址
conda install -n zlltest numpy # 在名為 zlltest 環(huán)境下安裝 numpy 包
# 使用地址 https://conda.anaconda.org/anaconda 來安裝tensorflow
conda install --channel https://conda.anaconda.org/anaconda tensorflow=1.8.0
對于那些用 pip 無法安裝成功的模塊你都可以嘗試用 conda 來安裝,如果用 conda 找不到相應的包,當然你繼續(xù)選擇 pip 來安裝包也是沒問題的。
升級
conda update conda # 更新 conda
conda update anaconda # 更新 anaconda
conda update anaconda-navigator #update最新版本的anaconda-navigator
conda update python # 更新 python
virtualenv的使用
virtualenv是一個創(chuàng)建隔絕的python環(huán)境的工具,virtualenv創(chuàng)建一個包含所有必要的可執(zhí)行文件的文件夾,用來使用python工程所需的包。
1. 安裝:pip install virtualenv
2. 創(chuàng)建虛擬環(huán)境,在工程目錄下,例如:pro_name,切換到 pro_name 下:
virtualenv venv 命令創(chuàng)建虛擬環(huán)境,venv 是虛擬環(huán)境名稱,可以修改。默認是--no-site-packages
--no-site-packages: 令隔離環(huán)境不能訪問系統(tǒng)全局的site-packages目錄
--system-site-packages : 令隔離環(huán)境可以訪問系統(tǒng)全局的site-packages目錄
virtualenv --system-site-packages -p /usr/bin/python3.6 venv36 #依賴于主環(huán)境
創(chuàng)建一個獨立的python3.6虛擬環(huán)境: virtualenv -p /usr/bin/python3.6 venvp36
3. 進入虛擬環(huán)境
linux:
source venv/bin/activate
source venvp36/bin/activate
windows:
venv/Scripts/activate
在venv環(huán)境下,用pip安裝的包都被安裝到venv這個環(huán)境下,系統(tǒng)Python環(huán)境不受任何影響。也就是說,venv環(huán)境是專門針對pro_name這個目錄創(chuàng)建的
4. 退出、刪除
退出當前的venv環(huán)境,使用命令:deactivate
如果需要刪除我們創(chuàng)建的虛擬環(huán)境,只需要退出,并刪除創(chuàng)建的文件夾即可
查看python指向:
ls -l /usr/bin | grep python
rm /usr/bin/python
python3指向python3.6(定義一個軟連接)
ln -s /usr/bin/python3.6 /usr/bin/python3
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sanic==20.12.3
原理(環(huán)境復制與包遷移)
pip
第三方包的安裝路徑: Python37Libsite-packages
在沒有網(wǎng)絡的情況下非常適合從一個已經(jīng)安裝包的電腦上拷貝包到另一個沒有安裝包的電腦上。
進入第三方庫安裝的路徑的文件夾。site-packages。
找到需要的包復制即可。注意一個庫的包有兩個文件,要同時復制。
將包移動到另一臺電腦上的site-packages 粘貼即可使用(有很多第三方包是關聯(lián)一些其它包的,都需要拷貝過去)。
conda
conda和pip安裝庫的區(qū)別
在Anaconda中,無論在哪個環(huán)境下,只要通過conda install xxx的方式安裝的庫都會放在Anaconda的pkgs目錄下,如:E:pythonanacondapkgs
numpy-1.18.1-py36h48dd78f_1。這樣的好處就是,當在某個環(huán)境下已經(jīng)下載好了某個庫,再在另一個環(huán)境中還需要這個庫時,就可以直接從pkgs目錄下將該庫復制至新環(huán)境(將這個庫的Libsite-packages中的文件復制到當前新環(huán)境下Lib中的第三方庫中,也即Libsite-packages中,這個過程相當于通過pip install xxx進行了安裝)而不用重復下載。
conda和pip卸載庫的區(qū)別
pip是在特定的環(huán)境中進行庫的安裝,所以卸載庫也是一樣的道理,通過pip uninstall xxx就可以將該環(huán)境下Libsite-packages中對應的庫進行卸載了。
如果通過conda uninstall xxx刪除當前環(huán)境下某個庫時,刪除的只是當前環(huán)境下site-packages目錄中該庫的內(nèi)容,它的效果和通過pip uninstall xxx是一樣的。如果再到另一個環(huán)境中通過conda install xxx下載這個庫,則還是通過將pkgs目錄下的庫復制到當前環(huán)境。若要清空這個pkgs下的已下載庫,可以通過命令conda clean -h進行實現(xiàn)。
替換成國內(nèi)源
開源軟件國內(nèi)鏡像源對比,參考:
https://huaxiaostar.com/2020/07/open-source-china-mirror-list/#more
pip
pypi 清華大學源:https://pypi.tuna.tsinghua.edu.cn/simple
pypi 豆瓣源 :https://pypi.douban.com/simple/
pypi 騰訊源:https://mirrors.cloud.tencent.com/pypi/simple
pypi 阿里源:https://mirrors.aliyun.com/pypi/simple/
有些還安不上,可以增加:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
pip install markdown # 這樣會從國外官網(wǎng)下載markdown模塊并安裝。
pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple #替換成清華大學源。
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
conda
Conda 添加源有2種常用方式。以下以清華源為例做說明:
方式一
添加源的方式是執(zhí)行以下命令:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
conda info 查看配置詳情
conda install --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ torchvision=0.8.1
conda install --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ torch
方式二
修改用戶目錄下的 .condarc 文件如下:
channels:
- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
注,Windows 在資源管理器里無法直接創(chuàng)建名為 .condarc 文件,有幾種解決方案:
- PowerShell 里執(zhí)行 New-Item .condarc 命令來創(chuàng)建
- 在 VS Code 里新建 .condarc 文件
- 執(zhí)行命令 conda config --set show_channel_urls yes 生成
注,上述兩種方式里,都只列了比較核心的 main 和 free packages,但一般夠用了。如果想添加更多 packages,可以參考清華源-Anaconda幫助頁面:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/