Python多版本管理工具pyenv(Deepin15.9)

pyenv可以帮助开发者安装和管理多个Python版本,创建虚拟环境等。
Git地址:https://github.com/pyenv/pyenv
安装说明:https://github.com/pyenv/pyenv-installer

0 预安装条件

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl

更改 libreadline-dev环境:

sudo apt install libedit-dev

1 安装、更新、删除pyenv

1.1 安装pyenv

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   148  100   148    0     0    251      0 --:--:-- --:--:-- --:--:--   251
100  2188  100  2188    0     0   1146      0  0:00:01  0:00:01 --:--:--  1878
正克隆到 '/home/zhou/.pyenv'...
remote: Enumerating objects: 616, done.
remote: Counting objects: 100% (616/616), done.
remote: Compressing objects: 100% (428/428), done.
remote: Total 616 (delta 297), reused 273 (delta 98), pack-reused 0
接收对象中: 100% (616/616), 359.06 KiB | 156.00 KiB/s, 完成.
处理 delta 中: 100% (297/297), 完成.
正克隆到 '/home/zhou/.pyenv/plugins/pyenv-doctor'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 11 (delta 1), reused 6 (delta 1), pack-reused 0
展开对象中: 100% (11/11), 完成.
正克隆到 '/home/zhou/.pyenv/plugins/pyenv-installer'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 17 (delta 2), reused 9 (delta 1), pack-reused 0
展开对象中: 100% (17/17), 完成.
正克隆到 '/home/zhou/.pyenv/plugins/pyenv-update'...
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
展开对象中: 100% (10/10), 完成.
正克隆到 '/home/zhou/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (51/51), done.
remote: Total 57 (delta 10), reused 19 (delta 0), pack-reused 0
展开对象中: 100% (57/57), 完成.
正克隆到 '/home/zhou/.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
展开对象中: 100% (10/10), 完成.

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

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

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

在.bashrc文件中手动添加pyenv环境变量路径:

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

使.bashrc文件生效:

$ source .bashrc

1.2 更新pyenv

$ pyenv update
Updating /home/zhou/.pyenv...
来自 https://github.com/pyenv/pyenv
 * branch            master     -> FETCH_HEAD
已经是最新的。
Updating /home/zhou/.pyenv/plugins/pyenv-doctor...
来自 https://github.com/pyenv/pyenv-doctor
 * branch            master     -> FETCH_HEAD
已经是最新的。
Updating /home/zhou/.pyenv/plugins/pyenv-installer...
来自 https://github.com/pyenv/pyenv-installer
 * branch            master     -> FETCH_HEAD
已经是最新的。
Updating /home/zhou/.pyenv/plugins/pyenv-update...
来自 https://github.com/pyenv/pyenv-update
 * branch            master     -> FETCH_HEAD
已经是最新的。
Updating /home/zhou/.pyenv/plugins/pyenv-virtualenv...
来自 https://github.com/pyenv/pyenv-virtualenv
 * branch            master     -> FETCH_HEAD
已经是最新的。
Updating /home/zhou/.pyenv/plugins/pyenv-which-ext...
来自 https://github.com/pyenv/pyenv-which-ext
 * branch            master     -> FETCH_HEAD
已经是最新的。

1.3 删除pyenv

rm -fr ~/.pyenv

同时删除 .bashrc文件中pyenv环境变量内容

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

2 pyenv 安装相关软件

pyenv安装源位于国外,因此在安装python相关软件时非常慢。
查看pyenv可安装的软件:

$ pyenv install --list

pyenv可安装Python相关软件设置位于:~/.pyenv/plugins/python-build/share/python-build,打开其中anaconda3-5.3.1文件可以看到其中的安装文件源地址:

case "$(anaconda_architecture 2>/dev/null || true)" in
  2 "Linux-x86" )
  3   install_script "Anaconda3-5.3.1-Linux-x86.sh" "https://repo.continuum.io/archive/Anacon    da3-5.3.1-Linux-x86.sh#5dab8b2c95595df7fa55b88643f8372135c14faabd9ec05a34021551bb0999a1"     "anaconda" verify_py36
  4   ;;
  5 "Linux-x86_64" )
  6   install_script "Anaconda3-5.3.1-Linux-x86_64.sh" "https://repo.continuum.io/archive/Ana    conda3-5.3.1-Linux-x86_64.sh#d4c4256a8f46173b675dd6a62d12f566ed3487f932bab6bb7058f06c124b    cc27" "anaconda" verify_py36
  7   ;;
  8 "MacOSX-x86_64" )
  9   install_script "Anaconda3-5.3.1-MacOSX-x86_64.sh" "https://repo.continuum.io/archive/An    aconda3-5.3.1-MacOSX-x86_64.sh#23c373abce2463d4df495f5a1c7e8b0faec6eda09542d98f41ed65a0fa    0dbde0" "anaconda" verify_py36
 10   ;;
 11 * )
 12   { echo
 13     colorize 1 "ERROR"
 14     echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architec    ture 2>/dev/null || true)."
 15     echo
 16   } >&2
 17   exit 1
 18   ;;

anaconda3-5.3.1linux版本的下载地址:https://repo.continuum.io/archive/Anaconda3-5.3.1-Linux-x86_64.sh,可以将其更改为中科大或清华的国内源位置:

# 中科大源
https://mirrors.ustc.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
# 清华源
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh

除此之外还有一种更简单值得推荐的方法

在~/.pyenv目录下新建名为cache的目录,把需要安装到软件通过国内源下载并放到cache目录下,通过pyenv install命令安装即可。
以Python3.7.1 为例,pyenv下载Python3.7.1地址为:https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
因此,可以通过Python官方网站下载后缀名为xz格式的Python-3.7.1.tar.xz文件并放置于~/.pyenv/cache目录下,执行 pyenv install 3.7.1安装Python-3.7.1。


如果出现不能安装Python的错误信息BUILD FEILED,可以通过执行以下命令:

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

解决问题网址:
https://github.com/pyenv/pyenv/wiki
https://github.com/pyenv/pyenv/wiki/Common-build-problems


国内可用的Python软件源:
搜狐:http://mirrors.sohu.com/python/
anaconda软件源:
中科大:https://mirrors.ustc.edu.cn/anaconda/archive/
清华:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive

2 pyenv 常用命令

pyenv install --list # 列出可安装版本
pyenv install <version> # 安装对应Python版本
pyenv install -v <version> # 安装对应Python版本,若发生错误,显示详细的错误信息
pyenv versions # 显示当前使用的python版本
pyenv which python # 显示当前python安装路径
pyenv global <version> # 设置默认Python版本
pyenv local <version> # 在当前路径创建一个.python-version文件, 以后进入这个目录自动切换为该Python版本
pyenv shell <version> # 在当前shell的session中启用某Python版本,优先级高于global 及 local

3 虚拟环境使用

pyenv virtualenv env # 从默认版本创建虚拟环境
pyenv virtualenv 3.7.1 env-3.7.1 # 创建3.7.1版本的虚拟环境
pyenv activate env-3.7.1 # 激活 env-3.7.1这个虚拟环境
pyenv deactivate # 停用当前的虚拟环境
pyenv uninstall env-3.7.1 # 删除 env-3.6.4 这个虚拟环境

具体使用方法步骤
step1 创建基于Python-3.7.1的虚拟环境,环境名为env-3.7.1

$ pyenv virtualenv 3.7.1 env3.7.1
Looking in links: /tmp/tmpv63lu7ne
Requirement already satisfied: setuptools in /home/zhou/.pyenv/versions/3.7.1/envs/env3.7.1/lib/python3.7/site-packages (39.0.1)
Requirement already satisfied: pip in /home/zhou/.pyenv/versions/3.7.1/envs/env3.7.1/lib/python3.7/site-packages (10.0.1)

step2 在项目文件中使用pyenv local env3.7.1,在项目当前目录中创建.python-version文件并写入虚拟环境名

$ pyenv local env3.7.1
(env3.7.1) $ ls -al
总用量 12
drwxr-xr-x 2 zhou zhou 4096 12月  2 14:21 .
drwxr-xr-x 3 zhou zhou 4096 12月  2 14:14 ..
-rw-r--r-- 1 zhou zhou    9 12月  2 14:21 .python-version

4 在虚拟环境中pypi安装模块使用国内源(中科大源)

编辑~/.pip/pip.conf文件,如果没有就自行创建,添加如下内容:

 [global]
 index-url = https://mirrors.ustc.edu.cn/pypi/web/simple
 format = columns

参考文献:
1 https://github.com/pyenv/pyenv
2 https://github.com/pyenv/pyenv-installer
3 https://www.jianshu.com/p/af1f8d7b6b31

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容