中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中pyenv虛擬環境管理工具的使用方法

發布時間:2020-05-26 11:34:30 來源:億速云 閱讀:470 作者:Leah 欄目:編程語言

今天小編給大家分享的是python中pyenv虛擬環境管理工具的使用方法,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。

在學習Python的時候,最經常遇到的問題就是包版本的問題,比如說這個應用需要libtool包的1.1.1版本,而之前開發的應用則只能運行在1.0.1版本上。那么怎么讓兩個應用都能夠正常運行起來呢?聰明的開發者們提出了虛擬環境的概念,就像電腦的虛擬機一樣,創建一個虛擬環境就像創建了虛擬機。你在虛擬環境里做任何操作都不會影響到其他的虛擬環境,也不會影響到系統環境。同時你也可以在你的虛擬環境里安裝任何版本的包來進行測試。
在昨天的文章里介紹了Python使用的比較多的一個虛擬環境管理包virtualenv,這個包用在windows系統上比較多。而在Linux/Unix系統上用的比較多的是另外一個虛擬環境管理工具pyenv。

什么是pyenv

pyenv是一個虛擬環境管理工具,可以同時管理多個Python版本,并能以這些Python版本為模板來創建不同的虛擬環境,而且可以靈活的在這些虛擬環境之間進行切換。它具有以下優點:

  • 可以直接修改全局Python版本(慎重操作,危險)
  • 每個項目一個Python版本
  • 從多個Python版本中同時搜索命令,方便測試跨版本軟件。

既然這么方便,那么我們來看一下它是怎么使用的吧。

安裝

目前這個軟件還不支持在windows系統上使用,暫時只支持在Linux和Unix上安裝。對于macOS,可以使用Homebrew來安裝,官方文檔上對應的鏈接是:https://github.com/pyenv/pyenv#homebrew-on-macos
對于Linux/Unix用戶來說,有兩種安裝方式,第一種是根據官方文檔來一步步安裝,步驟如下:

  1. 克隆安裝軟件。命令是

    $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  2. 定義環境變量

    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

    對于使用zsh的用戶,需要把 ~/.bash_profile改成~/.zshrc
    對于使用Ubuntu的用戶,需要把 ~/.bash_profile改成~/.bashrc

  3. 將pyenv init命令添加到shell里已啟用shims和自動補全,shims是用于多版本Python選擇的工具,添加命令如下:

    $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

    對于使用zsh的用戶,需要把 ~/.bash_profile改成~/.zshrc
    對于使用Ubuntu的用戶,需要把 ~/.bash_profile改成~/.bashrc

  4. 重啟shell讓配置的命令生效,可以退出shell重新登錄,也可以執行命令:
    $ exec "$SHELL"

上面的安裝步驟看起來非常繁瑣對吧,官方也因此提供了一個一鍵安裝腳本,通過這個一鍵安裝腳本,上面的3個步驟都可以省略了,安裝腳本的命令是:

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

注意:需要提前安裝好git,因為它也是先通過git克隆到本地。

腳本執行過程如下:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   148  100   148    0     0     20      0  0:00:07  0:00:07 --:--:--    39
100  2454  100  2454    0     0     94      0  0:00:26  0:00:26 --:--:--   668
Cloning into '/root/.pyenv'...
remote: Enumerating objects: 670, done.
remote: Counting objects: 100% (670/670), done.
remote: Compressing objects: 100% (503/503), done.
remote: Total 670 (delta 335), reused 255 (delta 76), pack-reused 0
Receiving objects: 100% (670/670), 380.59 KiB | 30.00 KiB/s, done.
Resolving deltas: 100% (335/335), done.
....
Cloning into '/root/.pyenv/plugins/pyenv-which-ext'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (10/10), done.

這中間會克隆多個包,輸出信息比較長,內容類似,所以這里省略了一部分。腳本執行完畢以后,會提示你,沒有把pyenv添加到PATH路徑,然后你根據它的提示添加一下。提示內容如下所示:

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bashrc:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

我們需要執行的操作是,打開~/.bashrc文件,把最下面三行添加進去,添加好的~/.bashrc文件如下所示:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

保存退出,然后執行一下命令:

source ~/.bashrc

讓配置生效。

使用

到這里,pyenv就已經安裝好了。然后我們執行命令pyenv versions

[root@adminnode ~]# pyenv versions 
* system (set by /root/.pyenv/version)

這個命令不是查看pyenv的版本的,而是查看當前系統上安裝了哪幾個版本的Python,正常情況下剛安裝好只有一個system,對應的是系統的python版本。例如CentOS7默認是python2.7,而CentOS 8現在默認是python3.6。

因此如果我們想使用其他版本的python作為虛擬環境的模板時,就需要自己來安裝對應的版本,比如現在Python的最新版本已經到了3.8.2版本,我希望以這個版本來作為模板。那么我就需要安裝3.8.2。

安裝編譯python需要的依賴包
yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel \
readline-devel zlib-devel bzip2-devel  libffi-devel
下載python源碼包

這一步如果是在國內的服務器或虛擬機上建議操作,因為我們自己不下載的話,pyenv它默認會到python.org的官網上去下載源碼包,因為不同地區的網絡環境不一樣,可能會導致這一步特別慢,甚至會直接失敗。因此我們推薦首先自己到python官網下載好源碼包。然后上傳到你的服務器上,然后拷貝到pyenv的緩存目錄中,如下所示:

[root@adminnode ~]# ls
anaconda-ks.cfg   Python-3.8.2.tar.xz
[root@adminnode ~]# mkdir ~/.pyenv/cache
[root@adminnode ~]# 
[root@adminnode ~]# cp Python-3.8.2.tar.xz ~/.pyenv/cache/

然后再執行安裝命令的時候,它就會自動使用緩存里的源碼包,這樣安裝速度就會比較快。

安裝
[root@adminnode ~]# pyenv install 3.8.2
Installing Python-3.8.2...
Installed Python-3.8.2 to /root/.pyenv/versions/3.8.2

耐心等待它安裝完成,這里安裝命令后面直接跟上python對應的版本號即可。安裝完成后,所有版本的python都是安裝在/root/.pyenv/versions目錄下,如下所示:

[root@adminnode ~]# ls /root/.pyenv/versions/
3.8.2

然后我們再查看已經安裝的版本信息,就能夠看到新安裝的3.8.2,如下所示:

[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
  3.8.2
使用

既然模板搭建好了,那么我們現在就可以使用這個模板來創建我們需要的虛擬環境。在創建之前我們需要說幾個注意的點:

  • 當前模板中安裝了某個包,那么以這個模板創建的虛擬環境中就會有這個包。
  • 虛擬環境創建以后,模板中新安裝的包不會出現在虛擬環境中。也就是說虛擬環境一旦創建,虛擬環境和模板就是兩個完全隔離的環境了。

下面我們來看一個創建虛擬環境具體的例子,創建虛擬環境的命令基本格式是:

pyenv virtualenv  template_version   virtualenv_name

template_version指的是模板的版本號,virutalenv_name指的是虛擬環境名詞,一般是你的項目的名稱。假設我們要開發一個cmdb項目,那么我們就來創建一個cmdb的虛擬環境,如下所示:

[root@adminnode ~]# pyenv virtualenv 3.8.2 cmdb
Looking in links: /tmp/tmp_42mjdiv
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.8.2/envs/cmdb/lib/python3.8/site-packages (41.2.0)
Requirement already satisfied: pip in /root/.pyenv/versions/3.8.2/envs/cmdb/lib/python3.8/site-packages (19.2.3)
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
  3.8.2
  3.8.2/envs/cmdb
  cmdb

這個時候就能看到創建好的虛擬環境名稱,但是也可以看到當前目錄下的python版本還是system,那么怎么切換到cmdb版本呢?

pyenv是以目錄為單位來進行版本控制的,比如說你單獨一個項目有一個項目目錄,我在項目目錄下設置好這個項目的python版本,那么項目的子目錄全部會自動繼承這個配置。設置目錄的python版本命令是:

pyenv local virtualenv_name

示例如下:

[root@adminnode ~]# mkdir cmdb
[root@adminnode ~]# ls
anaconda-ks.cfg  cmdb  docker  Python-3.8.2.tar.xz
[root@adminnode ~]# cd cmdb
[root@adminnode cmdb]# pyenv local cmdb
(cmdb) [root@adminnode cmdb]# 

在上面的代碼中我們可以看到,切換到項目cmdb目錄下以后,設置該目錄的虛擬環境為cmdb,然后我們從shell的提示符中可以看到,前面多了一個(cmdb)的提示,表示我們進入到虛擬環境了,也就是說這個時候就是一個獨立的python開發環境。我們看一下這個目錄的內容,如下所示:

(cmdb) [root@adminnode cmdb]# ls -al 
total 8
drwxr-xr-x. 2 root root   29 Mar  3 11:29 .
dr-xr-x---. 9 root root 4096 Mar  3 11:24 ..
-rw-r--r--. 1 root root    5 Mar  3 11:29 .python-version
(cmdb) [root@adminnode cmdb]# cat .python-version 
cmdb

可以看到多了一個隱藏文件.python-version,文件內容是cmdb,也就是說pyenv是通過這個文件來控制當前目錄下的虛擬環境。

  1. 虛擬環境的刪除

當開發項目越來越多以后,可能虛擬環境的信息也會越來越多,因此就需要刪除一些不再使用的虛擬環境,這個時候就需要用到刪除命令,如下所示:

pyenv virtualenv-delete virtualenv_name

但是刪除之前,建議你通過虛擬環境的pip命令導出虛擬環境下的包列表,命令是:

pip freeze --all  > requirements.txt

將已安裝的包導出到requirements.txt文件中,然后再刪除這個虛擬環境:

(cmdb) [root@adminnode cmdb]# pyenv virtualenv-delete cmdb
pyenv-virtualenv: remove /root/.pyenv/versions/3.8.2/envs/cmdb? y
[root@adminnode cmdb]# ls -al 
total 12
drwxr-xr-x. 2 root root   53 Mar  3 11:41 .
dr-xr-x---. 9 root root 4096 Mar  3 11:24 ..
-rw-r--r--. 1 root root    5 Mar  3 11:29 .python-version
-rw-r--r--. 1 root root   31 Mar  3 11:41 requirements.txt
[root@adminnode cmdb]# cat .python-version 
cmdb

刪除完成后,當前目錄下的.python-version文件還存在,但是因為找不到對應的虛擬環境信息,此時就無法生效。

看完上述內容,你們對python中pyenv虛擬環境管理工具的使用方法大概了解了嗎?如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆社县| 长治县| 竹北市| 内丘县| 海阳市| 重庆市| 绿春县| 嘉荫县| 镇沅| 通榆县| 盐源县| 福安市| 长宁县| 疏勒县| 平潭县| 四会市| 米易县| 简阳市| 宜川县| 巩留县| 弥渡县| 丁青县| 盐边县| 崇义县| 栾城县| 宝清县| 本溪市| 临漳县| 高要市| 海口市| 阳新县| 锦州市| 彭州市| 仪征市| 从江县| 和平县| 左贡县| 十堰市| 甘德县| 东港市| 江都市|