甚麼是Miniconda?
以下節錄自我與ChatGPT的專業科研對話內容:
>Miniconda是Conda的輕量級版本,它是Anaconda發行版的簡化版本,主要用於提供Conda套件管理系統和環境管理功能。Miniconda相比於Anaconda來說更小巧、更輕量,並且只包含了最基本的組件,因此下載和安裝速度更快。
>
>Miniconda的主要特點和功能如下:
>
>套件管理:Miniconda包含Conda套件管理系統,可以用來方便地下載、安裝和管理數千個軟體套件,並且支持Python以及其他語言的套件。
>
>環境管理:Miniconda允許用戶創建和管理多個獨立的軟體環境,每個環境可以擁有不同的套件和版本,從而實現套件之間的隔離,避免了套件衝突。
>
>跨平台支持:Miniconda可在多個操作系統上運行,包括Windows、macOS和Linux,並且可以在不同的架構上安裝套件,如x86、x86_64和ARM等。
>
>輕量級和定制性:Miniconda僅包含最基本的組件,所占用的空間相對較小,安裝時可以選擇性地安裝需要的套件,用戶可以根據自己的需求進行定制。
>
>簡單易用:和Conda一樣,Miniconda的使用也非常簡單,只需使用一個指令即可進行套件的安裝和管理,並且具有良好的用戶文檔和社群支援。
>
>Miniconda適用於那些希望更加輕量化、自定義和高度控制的用戶。如果用戶只需要最基本的套件管理和環境管理功能,而不需要預裝大量的科學計算和數據分析套件,那麼Miniconda是一個不錯的選擇。用戶可以根據需要在Miniconda的基礎上逐步添加需要的套件,從而構建出符合自己需求的軟體環境。
## Install
官網: https://docs.conda.io/en/latest/miniconda.html
到conda的官方文件(document)中找到你要安裝的miniconda版本,也有for不同作業系統的,不同miniconda版本還有其預設的python版本,選定一個你要的給他按下去,會得到一個Miniconda3-XXX-XXX.sh,在Linux上安裝的話,只要把這個sh檔上傳到指定目錄下,接著:
```
bash Miniconda3-XXX-XXX.sh
```
他就會自動安裝。
然後會需要指定miniconda主程式的安裝目錄,預設會在:
```
%HOME/miniconda3
```
其中%HOME指的就是使用者的家目錄,你可以試試看echo $HOME。當然你也可以指定你要安裝在哪裡。
安裝好之後需要啟動miniconda,假設你是安裝在/home/S4107037054/miniconda3/,啟動方式:
```
source /home/S4107037054/miniconda3/bin/activate
```
接著你就可以看到
```
(base) [S4107037054@isb-n6 s4107037054]$
```
代表你成功進入miniconda下的初始環境base了~~~
## Create new enviroment
以下是建立新的conda環境基本語法:
```
conda create --name <env_name> python==3.8
```
--name, -n: 指定env的名稱。
python==3.8: 指定env中python的版本。
建議一定要指定python版本,不然會安裝到最新的,但很多程式還沒支援到最新的python版本,像是2023的qiime2不支援3.11(當時最新)的python,可以指定裝目前最熱門的python,目前2023.07.28最熱門的是3.8。
```
The following NEW packages will be INSTALLED:
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
ca-certificates pkgs/main/linux-64::ca-certificates-2023.05.30-h06a4308_0
libedit pkgs/main/linux-64::libedit-3.1.20221030-h5eee18b_0
libffi pkgs/main/linux-64::libffi-3.2.1-hf484d3e_1007
libgcc-ng pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
libgomp pkgs/main/linux-64::libgomp-11.2.0-h1234567_1
libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
ncurses pkgs/main/linux-64::ncurses-6.4-h6a678d5_0
openssl pkgs/main/linux-64::openssl-1.1.1u-h7f8727e_0
pip pkgs/main/linux-64::pip-23.2.1-py38h06a4308_0
python pkgs/main/linux-64::python-3.8.0-h0371630_2
readline pkgs/main/linux-64::readline-7.0-h7b6447c_5
setuptools pkgs/main/linux-64::setuptools-68.0.0-py38h06a4308_0
sqlite pkgs/main/linux-64::sqlite-3.33.0-h62c20be_0
tk pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0
wheel pkgs/main/linux-64::wheel-0.38.4-py38h06a4308_0
xz pkgs/main/linux-64::xz-5.4.2-h5eee18b_0
zlib pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0
Proceed ([y]/n)? y
```
系統會告知你這些package會一併下載並安裝,有興趣的可以看看這些套件是在幹嘛的。
貼到ChatGPT的回答結果:
>_libgcc_mutex: 一個內部的 Conda 套件,提供 C/C++ 程式編譯時所需的 Mutex 機制。
_openmp_mutex: 一個內部的 Conda 套件,提供 OpenMP 程式編譯>時所需的 Mutex 機制。
ca-certificates: 提供用於驗證 SSL 連線的根憑證,用於安全地建立與網路伺服器的加密通信。
libedit: 提供命令列編輯器的函式庫,用於支援命令列輸入和編輯功能。
libffi: 提供用於動態連結 C 程式庫的介面,允許 C 程式庫的功能在 Python 中被呼叫。
libgcc-ng: GCC 的共享函式庫,支援 C 和 C++ 程式的編譯和執行。
libgomp: GCC 的共享函式庫,支援 OpenMP 多執行緒程式的執行。
libstdcxx-ng: GCC 的共享函式庫,提供 C++ 的標準程式庫。
ncurses: 提供用於處理文字模式界面的函式庫,支援命令列應用程式的顯示和輸入處理。
openssl: 提供用於 SSL/TLS 加密通信的函式庫,支援安全的網路連線。
pip: Python 套件管理器,用於安裝 Python 套件。
python: Python 程式語言的執行時環境,用於執行 Python 程式。
readline: 提供用於命令列互動的函式庫,支援命令列輸入的編輯和歷史紀錄。
setuptools: Python 的套件建置和分發工具,用於安裝 Python 套件。
sqlite: 輕量級的資料庫引擎,支援 SQL 查詢和資料庫管理。
tk: 提供用於圖形使用者介面的函式庫,支援創建 GUI 應用程式。
wheel: Python 的套件建置格式,用於加速套件的安裝和分發。
xz: 提供用於壓縮和解壓縮檔案的函式庫。
zlib: 提供用於壓縮和解壓縮資料的函式庫。
安裝好後會得到以下提示:
```
# To activate this environment, use
#
# $ conda activate HMP_NGS
#
# To deactivate an active environment, use
#
# $ conda deactivate
```
接著就依照上面指令activate或deactivate就好囉。
如果有很多conda環境,你可以:
```
conda env list
```
就可以看到有哪些conda等著被activate。
如果要切換不同conda環境,建議可以先deactivate當下的,回到base,再去activate你要的環境。
```
conda deactivate
```
你可以試試看瘋狂activate不同的env後,輸入conda deactivate離開當下的環境會發生什麼事。
### create env with a yml file
.yml是YAML(YAML Ain't Markup Language)的檔案擴展名
---剩下的等之後編輯
## Install package
因為我們是使用miniconda,與conda或anaconda不同的是,使用miniconda建立新環境,他預設會安裝的套件就上面講到的那幾個,其他藥用的需要使用者自行安裝,而conda或anaconda,在建置環境時,很多分析套件如pandas等會一併安裝。用miniconda的優點就是,方便管理,你可以選擇你要安裝那些套件,也可以指定套件版本,而且這樣檔案大小也不會那麼肥,但缺點就是,你要很了解自己需要安裝哪些套件,也要注意安裝的版本,不同套件的不同版本之間可能會有衝突導致無法使用,因此在安裝套件時要格外小心,安裝時有任何messenge跳出來要注意在寫什麼。
以下是在conda環境中要安裝套件的基本語法:
```
conda install -c conda-forge scikit-learn=0.24.1
```
--channel, -c: 指定要從哪個channel安裝這個套件,不同channel可能放有不同版本的套件,這個要注意網路上有沒有說他要指定從哪個channel安裝,如果沒指定他就會用預設的channel安裝,但預設的channel更新速度可能比較慢,版本也可能比較不齊全,所以建議還是找看看這個套件指定用哪個channel。
scikit-learn: 這裡就是寫你要安裝甚麼,像我要安裝的是0.24.1版本的套件,如果沒有指定版本,就會安裝當時找到的最新版本(1.2.0),但因為這個時空背景下的我,需要指定用0.24.1的。
通常在安裝一個套件的時候,會需要一併安裝其他的套件,像是在裝sklearn時,會需要pandas和numpy,conda會提醒你哪些套件會一併安裝,建議養成好習慣,看看哪些套件也被安裝了,一來可以省掉你不知道已經有了又再裝這個套件的時間,二來可以了解不同套間之間相依的關係,對之後的學習路上會有所幫助。
可以執行下面指令查看conda環境安裝了哪些套件:
```
conda list -n TGS
```
--name, -n: 你所指定的conda環境
## Update conda
```
conda update -n base -c conda-forge conda
```
## Possible problems
```
Collecting package metadata (current_repodata.json): done
Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.
Solving environment: unsuccessful attempt using repodata from current_repodata.json, retrying with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.
Solving environment: -
```
無止境的卡在這個階段,有以下四種可能:
1. The package you are trying to install is not available in the conda-forge channel. In this case, you may need to try installing the package from a different channel, or you may need to specify a different channel in the conda install command.
你所指定安裝package的channel無法安裝此package,需要找其他的channel來安裝此套件。
2. The package you are trying to install is not compatible with your current version of conda or with the other packages you have installed. In this case, you may need to try updating your version of conda or try installing a different version of the package.
你安裝的這個套件或版本,可能跟其他的套件或版本發生衝突,conda會先自動偵測是與哪些套件衝突,並嘗試換裝不同版本,如果不行,你就要看是與哪個套件發生衝突然後處理。哦對,也有可能是跟你所使用的conda版本不相符導致的。
3. There is a problem with your conda configuration or with the conda environment you are using. In this case, you may need to try creating a new conda environment and installing the package there, or you may need to try re-installing conda itself.
4. 用下列方法解決chmod -R 777 miniconda3/
來源: https://stackoverflow.com/questions/74781771/how-we-can-resolve-solving-environment-failed-with-initial-frozen-solve-retry
在conda中安裝套件時,可能卡在這個畫面好一陣子,然後就timeout了,真的是很讚哦!
```
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/qiime2/label/r2023.2/linux-64/repodata.json>
```
這個齁我卡了很久,目前解決這個問題的方法是:
```
chmod -R 777 miniconda3/
```
chmod'ing seems to have worked as well (755).
是不是很簡單!!!!!???!!?!單純只是把miniconda路徑下的所有檔案權限開成777就好了,可能就是因為在安裝套件時,有些檔案的權限無法執行,所以在與遠端連線取得套件檔案出現問題。
雖然不知道後面還會不會跳出一樣的訊息,但...到時候出現再解決吧!!
還是無法解決的話可以試試:
```
find miniconda3/ -type f -exec touch {} +
```
將miniconda3下的所有檔案,執行touch {} +,把大家的時間戳記都改成現在當下的時間。```ll```就會發現,除了目錄外,所有檔案的時間戳記都變成今天的了。
還有最後一個方法:https://www.youtube.com/watch?v=wubqkcVN6WY
```
conda config ssl_verify false
```
它將關閉Conda中對SSL憑證的驗證,這樣在使用Conda時就不會驗證SSL憑證的有效性。
通常情況下,Conda會使用SSL憑證來確保從遠程服務器下載軟體包和資源時的安全性。然而,有時候可能會遇到一些問題,例如SSL憑證過期或不被信任等,導致無法正確驗證SSL憑證,這可能會影響Conda的正常運作。
使用conda config ssl_verify false 命令可以在一定程度上解決這個問題,但這也會增加使用Conda時的安全風險。因為關閉SSL憑證驗證意味著您的系統不會驗證遠程服務器的身份,這可能會使您容易受到中間人攻擊等安全威脅。是被列為最後方案,使用結束要再把它改回true。
來源: https://github.com/conda/conda/issues/9948#issuecomment-906410470