python環境管理的幾種方式


  Python語言和Java語言,在開發項目的時候有所不同。Java是系統有一個編譯環境,項目所依賴的包,放在各個項目下,這樣不同項目如果用到一個包的不同版本,只要和編譯器兼容,就沒問題。而Python項目依賴的包,會安裝在系統Python目錄下,如果多個項目使用同一個Python環境,但是依賴同一個包的不同版本,就會引發沖突。因此Python有一個虛擬環境的概念。
  Python虛擬環境的使用,就是為了隔離各個項目的環境,防止不同項目因為使用同一個包的不同版本而引發沖突。目前市面上主要的Python包管理工具有下述5種。下面依次介紹。
 

0.當前的系統情況及Python環境安裝

  如下,可以看到,當前用戶下比較干凈。創建了2個文件夾,分別用來存源碼和安裝程序。
 
  這里為了下面展示conda怎么用,安裝的miniconda。
 

Step1.下載minicnda

Linux:
1 wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
Windows:
https://docs.conda.io/en/latest/miniconda.html
 

Step2.安裝miniconda

# 查看幫助
1 sh Miniconda3-latest-Linux-x86_64.sh -h

# 安裝

1 sh Miniconda3-latest-Linux-x86_64.sh -p $HOME/apps/miniconda3_py38

# 創建超鏈接,方便后面升級

1 cd $HOME/apps
2 ln -s miniconda3_py38 miniconda3

# 修改環境變量

1 cd ~
2 vim .bashrc

進行全局替換::%s/miniconda3_py38/miniconda3/g

 
# 讓配置文件生效
1 source .bashrc

Step3.配置pip源和conda源

  由於眾所周知的原因,國內訪問境外網站的,下載速度特別感人。因此安裝Python包的時候,使用國內的鏡像會快不少。如果不在全局配置,每次下載需要使用-i參數,特別麻煩。
 

(1) pip源

# 可參考:https://developer.aliyun.com/mirror/pypi?spm=a2c6h.13651102.0.0.3e221b11eFK8RX
 
Linux:
  修改 ~/.pip/pip.conf (沒有就創建一個文件夾及文件)。
Windows:
  直接在user目錄中創建一個pip目錄,如:C:\Users\xx\pip,然后新建文件pip.ini。
 
寫入如下內容(以阿里源為例):
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
 
[install]
trusted-host=mirrors.aliyun.com

 (2) conda源

# 可參考:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
# 可以執行 conda config --set show_channel_urls yes 生成該文件之后再修改(尤其是Windows 用戶可能無法直接創建名為 .condarc 的文件)
 
Linux:
  修改 ~/.condarc (沒有就創建一個)
Windows:
  修改user目錄下的.condarc
  
寫入如下內容:

channels:

  - defaults

show_channel_urls: true

default_channels:

  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r

  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

custom_channels:

  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

 
最后都要執行:  conda clean -i  清除索引緩存
 

1.virtualenv

Step1.安裝virtualenv

1 pip install virtualenv

 

Setp2.創建虛擬環境

1 virtualenv py38_test_venv --always-copy

 

注意:

  (1)參數可以使用 virtualenv -h 查看

  (2)Virtualenv創建的虛擬環境,就在執行命令時,所在的目錄下

Step3.激活虛擬環境

1 source /path/to/py38_test_venv/bin/activate

問題:

  (1)需要知道虛擬環境的位置,才能激活

  (2)由於虛擬環境的位置不確定,不好管理.最好是放到一起

 

Step4.退出虛擬環境

1 deactivate

 

Step5.刪除虛擬環境

1 rm -rf /path/to/py38_test_venv

 

2.virtualenv + virtualenvwrapper

Step1.安裝Python

准備好Python2和Python3
 

Step2.安裝virtualenv + virtualenvwrapper

選一個Python作為主Python,並在該Python環境下,安裝下面兩個包
1 pip install virtualenv
2 pip install virtualenvwrapper  #(windows下是:pip install virtualenvwrapper-win)

 

Step3.配置環境變量

所有的虛擬環境都會創建到$WORKON_HOME目錄下。
linux:(.bashrc)
1 export WORKON_HOME=$HOME/.virtualenvs
2 source /path/to/virtualenvwrapper.sh

windows:

WORKON_HOME=/path/to/pyvirtualenvs/
 

Step4.指定版本建立虛擬環境

1 mkvirtualenv --python=/path/to/python3 py3_test_venvwrapper --always-copy
 
注意:
  (1)可以使用  mkvirtualenv -h 查看幫助
 

Step5.查看系統中的虛擬環境(使用mkvirtualenv 創建)

1 workon

 

Step6.激活虛擬環境

1 workon py3_test_venvwrapper

 

注意:
  (1)這里就不需要知道虛擬環境的位置了。
 

Step7.退出虛擬環境

1 deactivate

 

Step8.刪除虛擬環境

1 rmvirtualenv py3_test_venvwrapper

 

3.Conda

  當我們使用的是anaconda或者miniconda科學計算集成環境的時候,默認提供了一個conda的包管理工具,其作用和pip類似,可以使用conda安裝環境。
 

Step1.查看系統中的虛擬環境

1 conda env list

 

注意:
  (1)默認是有一個base的虛擬環境,當我們沒有創建其他環境的時候,默認指向他。“*”表示的就是當前激活的環境
 

Step2.創建虛擬環境

# 使用本地不存在的版本
1 conda create -n py37_test_conda --copy python=3.7

# 使用本地版本

1 conda create -n py38_test_conda --copy python=3.8 --offline

  注意:

  1. 可以使用 conda create -h 查看幫助
  2. 默認創建在:/path/to/miniconda3/envs
  3. 可以使用-p參數,指定創建路徑。一般默認就好
  4. Conda創建的虛擬環境,可以是本地不存在的版本,他會從網上下載一個對應的Python版本(小版本會是最新的)
 

Step3.激活虛擬環境

1 conda activate py37_test_conda

注意:

  (1)這里不需要知道虛擬環境的位置了。

 

Step4.退出虛擬環境

1 conda deactivate

 

Step5.刪除虛擬環境

1 conda env remove -n py37_test_conda

 

 4.Pipenv

  pipenv是當前主流的Python環境管理方式之一,很多項目都在使用。還是應該了解使用的。需要注意的是, pipenv的使用需要進到項目目錄進行

Step1.安裝pipenv

1 pip install pipenv

Step2.搭建虛擬環境

第一步:創建項目文件夾
1 mkdir test_proj

 

第二步:進入文件夾,執行初始化命令
1 pipenv --python 3.8

 

注意:
  (1)可以使用  pipenv -h 獲取幫助信息,很全
  (2)需要使用本地Python版本,如果需要聯網下載其他版本,需要其他條件
  (3)默認環境構建位置:$HOME/.virtualenvs/test_proj-cH7xaAhp,如需構建在項目目錄下,需要配置環境變量: export PIPENV_VENV_IN_PROJECT=1。此時虛擬環境路徑為/path/to/project/.venv。看個人習慣和需要。我比較習慣統一管理在一個目錄下。
  (4)項目根目錄下,添加環境變量文件.env,在進入虛擬環境時會自動添加環境變量。例如:為了避免Python 對stdout緩存導致日志順序錯亂,添加如下環境變量 PythonUNBUFFERED="1"
 

Step3.安裝依賴包

  使用pipenv創建虛擬環境后,需要用pipenv進行包管理。而不是conda或者pip。使用pipenv安裝包的時候,會在項目目錄下生成Pipfile文件和Pipfile.lock。
  (1)  pipenv install pandas==1.2.0   # 安裝pandas並指定版本,如需最新的可不指定版本,會自動lock,lock速度比較慢,可以在安裝的時候跳過。
  (2)  pipenv install xxxx==xxxx --skip-lock    # 可以在安裝的時候跳過lock
  (3)  pipenv install --dev pytest --skip-lock   # 只在測試環境安裝包
 
注意:

  (1)更改pip 源,修改Pipfile文件中[[source]] 下url : https://mirrors.aliyun.com/pypi/simple

 

Step4.進入虛擬環境,及退出

  此時就和使用workon或者conda activate虛擬環境一致了,可以使用pip管理包了。

  (1)進入虛擬環境: pipenv shell 

  (2)退出虛擬環境:exit

 

Step5.刪除虛擬環境

  pipenv --rm 
 

Step6.使用piepenv運行命令

(1)生成requirements.txt(因為有Pipfile,這個不是必須的。但建議還是要生成)

1 pipenv run pip freeze > requirements.txt

 

(2)執行Python 腳本
1 pipenv run python hello.py

 

Step7.其他相關命令

(1)查看包依賴:

1 pipenv graph

 
(2)查看虛擬環境路徑:
1 pipenv --venv

 

(3)查看虛擬環境Python解釋器的路徑
1 pipenv --py

 

(4)更新lock file
1 pipenv lock

 

(5)檢查包的安全漏洞
1 pipenv check

 

 (6)使用Pipefile.lock部署環境,
1 pipenv install --system --deploy --ignore-pipfile

注意:

  (1)--system 表示使用系統的Python環境,

  (2)--deploy表示如果lock file is out-of-date,則放棄安裝。

  (3)--ignore-pipefile表示不使用Pipfile 而是使用Pipfile.lock安裝。

 

5.Pyenv

  Pyenv是系統級的Python 環境管理。就把他當一個命令使用即可。

Step1.安裝pyenv

(1)安裝依賴
1 yum install readline readline-devel readline-static -y
2 yum install openssl openssl-devel openssl-static -y
3 yum install sqlite-devel -y
4 yum install bzip2-devel bzip2-libs -y
5 yum install gcc-c++ -y

 

(2)從github下載最新的pyenv

1 git clone https://github.com/pyenv/pyenv.git $HOME/apps/pyenv

 

Step2.配置環境變量

(1)配置pyenv的環境變量(Redhat版在.bashrc中添加如下信息)
export PYENV_ROOT=$HOME/apps/pyenv
export PATH="$PYENV_ROOT/bin:$PATH"
 
(2)Add pyenv init to your shell. Please make sure eval "$(pyenv init -)" is placed toward the end of the shell configuration file since it manipulates PATH during the initialization.
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
(其實就是在.bashrc最后面加一句:eval "$(pyenv init -))
 
注意:
  在啟動shell的時候加載pyenv的方式,會有一個問題:就是類似pycharm之類的IDE連不到遠程服務器了。因此,生產上可以使用這中方式管理,但是在開發測試階段可以不用,否則需要注釋掉pyenv在.bashrc中的配置,之后再手動執行,比較麻煩。
 

Step3.pyenv管理Python版本

可以先使用pyenv -h查看幫助。

 

# 查看已經安裝的版本

1 pyenv versions

注意:

  (1)星號所指,是當前使用的Python

 

# 查看可以安裝的Python 版本:

1 pyenv install --list # 或者pyenv install -l

(基本上各個發行版本都有,anaconda等等也都有)

 

# 安裝其他版本的Python

1 pyenv install 3.9.1

注意:

  (1)默認使用的是國外的源,下載。可能很慢
  (2)可以使用以下方式安裝(用國內源安裝很快):
  v=3.9.1;wget https://mirrors.huaweicloud.com/Python/$v/Python-$v.tar.xz -P $HOME/apps/pyenv/cache/;pyenv install $v 
  (3)或者先下載安裝包,放在/path/to/pyenv/cache目錄下(如果文件夾不存在,創建文件夾),anaconda的sh文件也可以支持,Python安裝包需要下載tar.xz或者tar.gz格式的。
  (4)這樣安裝的Python默認安裝到了:/path/to/pyenv/versions
 

# 卸載Python

1 pyenv uninstall 3.9.1

 

# 切換當前Python 環境

shell的優先級高於local和global,優先級順序spyenv > local > global。
 (1)設置全局的Python版本
設置:  pyenv global <版本名稱> 
查看:  pyenv global 

(2)設置局部的Python版本,

設置:  pyenv local <版本名稱> 
查看:  pyenv local 
 
  此時,版本號寫入到當前文件夾下的.Python-version文件。優先級要比global設置的版本優先級高,pyenv會從當前目錄開始向上逐層尋找.Python-version文件,直到根目錄為止。若找不到,就用global版本。
(3)設置shell的Python版本
  pyenv shell <版本名稱> 
 

(4)清除配置

如果感覺Python版本不對,可以使用如下命令先清除pyenv設置
1 pyenv global --unset
2 pyenv local --unset
3 pyenv shell --unset

 

Step4.pyenv安裝插件

  pyenv也可以創建虛擬環境,但需要借助一些插件(pyenv-virtualenv)。這些插件其實就是把代碼下載到指定的路徑下。
 
1.安裝pyenv-alias
1 git clone https://github.com/s1341/pyenv-alias.git $(pyenv root)/plugins/pyenv-alias

 

使用方法:
1 VERSION_ALIAS="py27" Python_CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.18

注意:

  (1)需要指定VERSION_ALIAS變量和Python_CONFIGURE_OPTS變量。
  (2)添加Python enable-shared 選項是因為:The --enable-shared option to ensure that shared libraries are built for Python. By not doing this you are preventing any application which wants to use python as an embedded environment from working.
 
2.安裝pyenv-migrate
1 git clone git://github.com/yyuu/pyenv-pip-migrate.git $(pyenv root)/plugins/pyenv-pip-migrate

 

使用方法:
1 pyenv migrate <源Python版本名> <目標Python版本名>

 

3.安裝pyenv-virtualenv插件
1 git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

 

注意:
  使用pyenv創建一個虛擬環境,首先會在Python版本名文件夾下的envs文件夾(/path/to/pyenv/versions/<版本號>/envs)中創建一個Python虛擬環境的文件夾,同時會在/path/to/pyenv/versions文件夾下創建一個與虛擬環境名同名的軟連接。如果是使用anaconda或者miniconda安裝的Python環境,則pyenv virtualenv 會使用conda命令來創建虛擬環境。
 

Step5.創建虛擬環境

(1)創建虛擬環境: pyenv virtualenv <Python版本名> <虛擬環境名稱>
1 pyenv virtualenv 3.9.1 py39

 
注意:
  (1)如果不加Python版本名默認使用,當前指定的Python版本構建
 

Step6.激活及退出虛擬環境

  此時可以像直接使用pyenv創建的Python版本一樣的方式使用虛擬環境,因為pyenv在/path/to/pyenv/versions里為我們創建了一個軟連接指向對應的虛擬環境
pyenv shell <虛擬環境名稱>,退出直接,切換Python環境就可以了。
 

Step7.刪除虛擬環境(直接用pyenv的命令)

1 pyenv virtualenv-delete <虛擬環境名稱>
或者
1 pyenv uninstall <虛擬環境名稱>

 

總結

  這些Python環境的管理方式各有優劣,適用的范圍也各不相同。可以根據自己的需求和實際情況選擇一種。其中 pyenv作為系統級的Python環境管理,其實現的是Python多版本共存解決方案Virtualenv是其他虛擬環境管理的基礎,使用起來不方便,一般不單獨使用。所以常見的虛擬環境管理工具是:virtualenv+virtualenvwrapper、conda、pipenv。其中 conda因為和科學計算環境anaconda關聯,如果需要使用,可以安裝anaconda或者miniconda集成環境virtualenv+virtualenvwrapper和pipenv則各有優劣,但是pipenv建議只用做創建虛擬環境,包管理還是用pip並確保requirements.txt都在。可酌情使用。
另外,conda和pyenv支持使用本地不存在的Python版本(聯網下載)。Pipenv如果需要聯網使用,需要依賴pyenv。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM