文章目錄
- 一. python包管理概述
- 1. miniforge、Miniconda與Anaconda
- 2. conda與pip的區別是什么?
- 3. pip與conda配合使用
- 二. 使用conda管理不同py環境
- 1. 創建一個環境
- 2. 解決沖突
- 三. 命令合集
- 1. conda
- 1.1. 常用
- 1.2. 環境管理
- 1.3. 分享環境
- 1.4. 包管理
- 2. 依賴沒有在conda源內時,使用pip
- 3. 使用conda安裝requirement.txt依賴
一. python包管理概述
1. miniforge、Miniconda與Anaconda
Anaconda vs Miniconda
- Anaconda 和 Miniconda 是一個公司的產品,商用是付費的,個人暫時免費;
- Anaconda = Miniconda + more packages。
Miniconda = Python + conda,安裝最小的支持包,如openssl, ncurses…
Anaconda = Python + conda + meta package 安裝至少不低于400個常見的支持包,如curl, numpy, pandas…
?
Miniconda vs Miniforge
-
miniforge是由社區主導,用GitHub托管,完全免費,使用 (而且只用)conda-forge 作為(默認)下載channel,避開了Anaconda的repository,從而也就避開了商業使用被Anaconda追責的問題。
-
Miniforge是由社區主導,用GitHub托管,完全免費。
?
channel的定義
conda channels (源) 是 packages 存儲的位置,也即是你是從哪個來源下載這個包,對應到conda內部處理則是下載文件的鏈接。因為不同源會有相同名字的包,因此必須指定來源,同時安裝conda的時候也會有一個默認的channel。目前主流的就是 conda-forge,齊全且更新快。如果有多個channel,他們會按順序確定優先級,優先的源上找不到,就會到下一個優先級的源上去找。
還可以設置channel的優先級是否strict,如果是strict的話,則只會在這一個源上查找。
- Miniforge 使用conda-forge 作為默認 channel
- Miniconda 使用anaconda.org 作為默認channel。
?
MacOS上的支持
-
Miniforge 比 Anaconda、Miniconda 更早支持了Apple M1芯片。在蘋果官方的Tensorflow加速訓練教程中也是推薦的Miniforge。
-
Miniforge相比Anaconda更為靈活輕便,安裝體積小、運行速度快、支持mamba、支持PyPy等。
?
2. conda與pip的區別是什么?
Conda 和 pip 都是 Python 的包管理工具,但它們有一些區別,主要體現在以下幾個方面:
- 包管理范圍:
- pip:是 Python 的默認包管理器,主要用于安裝和管理 Python 包(也稱為模塊或庫),這些包通常發布在 Python Package Index(PyPI)上。
- Conda:是一個跨平臺的包管理器和環境管理器,不僅可以管理 Python 包,還可以管理任何語言的軟件包。
- 環境管理:
- pip:雖然可以安裝和管理 Python 包,但本身并沒有直接提供環境管理的功能。通常需要結合 virtualenv 或者 venv 等工具來創建和管理虛擬環境。
- Conda:除了包管理外,還具有強大的
環境管理功能
。Conda 可以創建、導出、復制和刪除環境,允許用戶在不同的項目中使用不同版本的軟件包及其依賴項。
?
總結
- conda的優勢:包之間嚴格的依賴檢查;是一個超越Python的環境管理器,可以創建多個環境,環境之間互相隔離;
- pip的優勢:絕大多數包
優先發布到pip上
,安裝方便,群眾基礎好。
?
如果需要多個python環境,最好使用conda,因為它可以做創建多個py虛擬環境,互不影響(不同的項目依賴的python 包版本不一致)。
?
3. pip與conda配合使用
pip不像conda一樣,它不知道環境,我們首先要確保我們用的是本環境的pip,這樣pip install時,包才會創建到本環境中。
用下面命令查看我們此時用的pip為哪個環境:
which -a pip# macos
whereis pip
# pip: /Users/lianggao/miniforge3/envs/pp/bin/pip
當我們自己創建的conda環境里沒有pip,此時進入自己的conda環境也會默認用base環境的pip,這就需要將pip安裝入本環境。(盡量不要使用base的pip在其他環境裝包,這樣也會裝在base環境中,有產生版本沖突的可能。)
?
在conda環境安裝pip使用如下命令:
#(進入環境后)
conda install pip
用conda list查看此時python環境安裝的包。
?
二. 使用conda管理不同py環境
1. 創建一個環境
# 創建環境,
conda create --name myenv python=3.8conda activate myenvpython3 --version## 安裝包命令
conda install numpy pandas matplotlibpython3 -m pip install ...arch -arm64 zsh
2. 解決沖突
The conflict is caused by:paddlepaddle 2.6.1 depends on protobuf>=3.20.2; platform_system != "Windows"paddlepaddle 2.6.0 depends on protobuf>=3.20.2; platform_system != "Windows"
。。。To fix this you could try to:1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflictERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
放寬版本要求:
如果你的項目允許,可以嘗試放寬對 protobuf 的版本要求。例如,將 <=3.20.0, >=3.1.0
改為 >=3.1.0
。這將讓 pip 更有可能找到一個滿足條件的版本,并解決依賴沖突。
python3 -m pip install "protobuf>=3.20.2; platform_system != 'Windows'"
?
三. 命令合集
1. conda
1.1. 常用
conda create --name myenv python=3.8
# 激活環境
conda activate ppfast# 推出當前環境
conda deactivate# 查看當前環境所依賴的包
conda list# 激活conda 環境后pip命令就可以使用了。一般這樣使用:
python3 -m pip install xxx# 修改conda的python版本
conda install python=3.10# 查看擁有的環境
conda info --envs
?
1.2. 環境管理
##創建環境
conda create --name your_env_name##創建制定python版本的環境
conda create --name your_env_name python=2.7
conda create --name your_env_name python=3
conda create --name your_env_name python=3.5##創建包含某些包的環境
conda create --name your_env_name numpy scipy##創建指定python版本下包含某些包的環境
conda create --name your_env_name python=3.5 numpy scipy##列舉當前所有環境
conda info --envs
## 列舉當前環境下所有包
conda env list## 進入某個環境
activate your_env_name## 退出當前環境
deactivate ## 復制某個環境
conda create --name new_env_name --clone old_env_name ## 刪除某個環境
conda remove --name your_env_name --all
?
1.3. 分享環境
通過分享你的 environment.yml 文件,別人就可以從該文件中創建與你一模一樣的環境。
## 在當前環境生成一個environment.yml
conda env export > environment.yml## 將該文件放在工作目錄下,可以通過以下命令從該文件創建環境
conda env create -f environment.yml
?
1.4. 包管理
# 列舉當前活躍環境下的所有包
conda list# 列舉一個非當前活躍環境下的所有包
conda list -n your_env_name# 為指定環境安裝某個包
conda install -n env_name package_name
?
2. 依賴沒有在conda源內時,使用pip
如果不能通過conda install來安裝,可以直接用pip直接安裝。
#pip安裝項目依賴
python3 -m pip install -r requirements.txt# 查看當前環境所依賴的包
conda list
?
3. 使用conda安裝requirement.txt依賴
除了使用pip命令來安裝requirement.txt依賴,也可以使用conda命令來安裝。
conda install --yes --file requirements.txt
如果conda下載不了,則使用pip下載
while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt
?
將依賴生成文件
# Export to .yml file
conda env export > freeze.yml# To reproduce:
conda env create -f freeze.yml
?
?
?
參考:
https://stackoverflow.com/questions/35802939/install-only-available-packages-using-conda-install-yes-file-requirements-t