其实按照官方文档就已经可以安装并使用pyenv和virtualenv了,但在实际操作过程中,你可能还是会遇到各种各样的问题,希望这篇文章能帮到你。
值得注意的是,这篇文章所记录的操作都是在Debian 10操作系统下完成的。如果你的操作系统不同,可能无法照搬这篇文字的操作。不过无需担心,安装过程在各个操作系统下是大致相同的,聪明的你一定能灵活处理。(如果实在处理不了,可以留言。)
下面,我们开始吧!
安装
首先,确保该有的东西都有,没有的都装上。
sudo apt-get update
sudo apt-get install --no-install-recommends 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 liblzma-dev
sudo apt-get install git
然后,安装pyenv到$HOME
下的.pyenv
目录。
从仓库获取pyenv,放置到.pyenv
目录。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
配置.bashrc
文件。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
重启Shell以应用新的.bashrc
文件。
现在,你已经可以使用pyenv啦!
接着,我们安装virtualenv。
从仓库获取virtualenv,以插件形式安装到.pyenv
目录。
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
配置.bashrc
,为自动激活virtualenv作准备。
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
重启shell以应用新的.bashrc
文件。
至此,virtualenv已经安装完毕!
下面,我们通过一个Hello World程序来试用一下pyenv和virtualenv,了解使用pyenv和virtualenv的方法。
使用
首先,通过pyenv安装一个Python。
查看可以安装的Python版本。
我选择3.8.1版本进行安装。
接着,创建一个virtualenv。
创建一个使用3.8.1版本Python的virtualenv,名为env_raaynk_hello_world
。
pyenv virtualenv 3.8.1 env_raaynk_hello_world
这条命令会在$(pyenv root)/versions
目录下创建一个env_raaynk_hello_world
目录。
然后,实现名为env_raaynk_hello_world
的virtualenv的自动激活。
新建存放项目代码的目录,我把它放在$HOME
下的code_raaynk_hello_world
目录,并进入。
cd ~
mkdir code_raaynk_hello_world
cd code_raaynk_hello_world
创建.python-version
文件,在其中写上当前virtualenv的名字(可通过pyenv versions
命令查看所有可用virtualenv)。
pyenv versions
echo 'env_raaynk_hello_world' >> .python-version
现在,你的命令行开头应该会显示(env_raaynk_hello_world)
字样,表示当前virtualenv环境已激活。
创建一个Python代码文件,在其中写上打印Hello World!的代码。
echo 'print("Hello World!")' >> main.py
运行它。
到这里,相信你对pyenv和virtualenv的使用方法已经比较清楚了。
下面,我会对pyenv和virtualenv的一些常用命令进行整理。
常用命令
查看可安装的Python版本
安装指定Python版本
卸载指定Python版本
查看当前已安装的Python版本
查看当前已激活的Python版本
创建指定版本的virtualenv
pyenv virtualenv <版本> <名称>
创建当前版本的virtualenv
查看所有存在的virtualenv
手动激活指定virtualenv
手动反激活当前已被激活的virtualenv
删除指定virtualenv(三种方法)
法一:删除文件
直接删除$(pyenv root)/versions
和$(pyenv root)/versions/{version}/envs
中的指定目录
法二:使用uninstall
命令
法三:使用virtualenv-delete
命令
pyenv virtualenv-delete <名称>
参考
https://github.com/pyenv/pyenv/wiki https://github.com/pyenv/pyenv/blob/master/README.md https://github.com/pyenv/pyenv/blob/master/COMMANDS.md https://github.com/pyenv/pyenv-virtualenv/blob/master/README.md
作者:Raaynk 链接:https://www.raaynk.com/archives/016-install-pyenv-virtualenv.html
python虚拟环境管理
](https://www.jianshu.com/u/5f2c2f52e7e7)
饶一熊IP属地: 广东
2020.03.27 17:19:05字数 1,131阅读 225
python虚拟环境管理
virtualenv
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。
此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。这里,就要隆重介绍 virtualenv
,一个可以帮助我们管理不同 Python 环境的绝好工具。
virtualenv
可以在系统中建立多个不同并且相互不干扰的虚拟环境。
1.Linux环境下安装、配置virtualenv
1.用pip指定清华源下载virturalenv
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
升级pip工具命令
pip3 install --upgrade pip
![](https://upload-images.jianshu.io/upload_images/14337088-81e44ad960cf1c2f.png?imageMogr2/auto-orient/strip | imageView2/2/w/865/format/webp) |
img
2.创建目录
cd /opt/
mkdir /PyEnv
进入PyEnv中
3.创建独立运行环境-命名
virtualenv --no-site-packages --python=python3 venv1 # 得到独立第三方包的环境,并且指定解释器是python3
![](https://upload-images.jianshu.io/upload_images/14337088-4f5dda9f3cf66f33.png?imageMogr2/auto-orient/strip | imageView2/2/w/863/format/webp) |
img
4.进入虚拟环境
source venv1/bin/activate # 此时进入虚拟环境(venv)Myproject
5.安装第三方包
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.18
此时pip的包都会安装到venv环境下,venv是针对Myproject创建的。
6.退出环境命令
virtualenv创建独立环境的原理
virtualenv
是如何创建“独立”的Python运行环境的呢?
原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv
环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。
2.确保开发环境一致性
假设我们在本地开发环境,准备好了项目+依赖包环境,现在需要将项目上传至服务器,上线发布,那么就要保证服务器的python环境一致性。
在实际工作情况中,开发环境的统一是非常重要的。
解决方案
1.通过命令保证环境的一致性,到处当前windows下python环境的包。
到出的文件在users/用户名下。
pip3 freeze > requirements.txt
2.将requirements.txt文件发送给linux服务器,可通过lrzsz或scp
scp requirements.txt user@host:dir
3.在linux中的虚拟环境中安装即可
注意切换到想要同步的虚拟环境中,执行的文件也要是相对路径或绝对路径
pip3 install -i https://pypi.douban.com/simple -r requirement.txt
![](https://upload-images.jianshu.io/upload_images/14337088-636e1f2124287df5.gif?imageMogr2/auto-orient/strip | imageView2/2/w/983/format/webp) |
img
windows虚拟环境中的环境迁移
windows如果也创建了虚拟环境,并且模块在虚拟环境中,想要迁移环境到linux中,
1.第一步,在windows中激活虚拟环境,在虚拟环境下
pip3 freeze > requirement.txt
2.将此文件,发送给linux服务器,可选lrzsz 或scp
scp requirements.txt user@host:dir
3.在linux中安装即可
pip3 install -i https://pypi.douban.com/simple -r requirement.txt
virtualenvwrapper工具
1.为什么使用virtualenvwrapper
因为virtualenv
都是用户手动去安装生成,那么就可能导致如下情况,用户a新建了一个虚拟环境在/home/下,用户b生成了虚拟环境2在/opt/下,最后虚拟环境目录十分混乱,用户使用虚拟环境的时候也分不清谁是谁。
而virtualenvwrapper
工具可以帮助我们,统一的管理linux中的python虚拟环境,并能够通过快捷命令的方式快速切换虚拟环境,十分方便。
但是virtualenvwrapper
也存在它的问题,他能管理的是同一个python版本的虚拟环境,也就是说如果你需要同时管理python2和python3 的虚拟环境,virtualenvwrapper
是无法做到的,你还是需要通过virtualenv来手动创建虚拟环境。
2.virtualenvwrapper工具的安装使用
1.安装工具
因为virtualenvwrapper
工具是物理环境的python使用的包,所以安装的时候需要退出虚拟环境后执行安装命令
pip3 install -i https://pypi.douban.com/simple virtualenvwrapper
2.配置用户个人配置文件
因为我们需要每次开机时,让系统都加载这个virtualenvwrapper
工具,我们需要把这个配置写到文件中,我们知道系统变量的配置文件/etc/profile,那么用户的配置文件呢?
用户个人的配置文件,在家目录下的~/.bash_profile
中
vim ~/.bash_profile # 修改家目录下个人配置文件
3.写入如下配置
export WORKON_HOME=~/Envs # 设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3 # 指定python解释器
source /opt/python36/bin/virtualenvwrapper.sh # 只有这一步,才是让这个工具生效的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
注意在指定python解释且的时候,填写自己的python路径。
4.查看是否加载了virtualenvwrapper工具
退出会话,重新登录,查看是否加载了virtualenvwrapper工具
ctrl + d 快速退出会话
ctrl + shift + r 快速重连会话
5.创建虚拟环境
工具创建后,使用命令管理 创建虚拟环境。
操作步骤演示如下:
![](https://upload-images.jianshu.io/upload_images/14337088-3af52e65fa0246ae.gif?imageMogr2/auto-orient/strip | imageView2/2/w/982/format/webp) |
img
3.virtualenvwrapper工具几个命令
workon # 虚拟环境的名字(支持tab补全) #激活虚拟环境
lsvirtualenv # 列出所有虚拟环境的目录
cdvirtualenv # 进入已激活的虚拟环境的目录
cdsitepackages # 进入虚拟环境下的第三方模块目录
更多精彩内容,就在简书APP
“小礼物走一走,来简书关注我”
还没有人赞赏,支持一下
](https://www.jianshu.com/u/5f2c2f52e7e7)
-
序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解…
-
1. 周嘉洛拥有一个不好说有没有用的异能。 异能管理局的人给他的异能起名为「前方高能预警」。 2. 周嘉洛第一次发…
-
序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都…
-
文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些…
-
文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不…
-
正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我…
茶点故事](https://www.jianshu.com/u/0f438ff0a55f)阅读 6249评论 0赞 48
-
文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一…
-
那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决…
-
文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我…
-
序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经…
-
正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日…
茶点故事](https://www.jianshu.com/u/0f438ff0a55f)阅读 3289评论 1赞 46
-
男人动作激烈,情到浓时诛心的话脱口而出,后来他抱着我的骨灰盒说想我…… 1. 双人床上,我在陆翊身下,承受他凶猛的…
-
正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。…
茶点故事](https://www.jianshu.com/u/0f438ff0a55f)阅读 3528评论 0赞 37
-
序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带…
-
正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境…
茶点故事](https://www.jianshu.com/u/0f438ff0a55f)阅读 3357评论 2赞 41
-
文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日…
-
文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响…
-
文/米丘 我家的后院里埋着一具尸体,是被我官人打死的。这成了我俩的心病,时不时要去坟头那棵树下拜拜,祈祷着这棵树千…
-
我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还…
-
正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚…
茶点故事](https://www.jianshu.com/u/0f438ff0a55f)阅读 4246评论 0赞 56
推荐阅读更多精彩内容
-
在学习Python的时候,最经常遇到的问题就是包版本的问题,比如说这个应用需要libtool包的1.1.1版本,而…
-
写在前面 关于Python虚拟环境管理,曾经做为一名新人一直不以为意,心想反正都是我要用的库,全安装在一起,要用直…
-
通过virtualenv可以创建python虚拟环境,而virtualenvwrapper是个管理python虚拟…
-
参考文献: 教程1:http://www.jianshu.com/p/e17263be54ea教程2:http:/…
[![](https://upload.jianshu.io/users/upload_avatars/2784070/8a980232-56c1-432c-8d1b-b20acaaf22cc.jpg?imageMogr2/auto-orient/strip imageView2/1/w/48/h/48/format/webp)leyu](https://www.jianshu.com/u/0109c742f486)阅读 8,533评论 0赞 1 -
见过我家娃的都说我家娃乖,但是也有令人抓狂的时候。娃作为一个男子汉,每天都要哭上一次,真的很无语又无助。 不…
其一:pyenv的设计和实现比较精简,且内置自动切换Python虚拟环境的功能。
其二:个人分别基于conda和pyenv实现了GNU TeXmacs上带有虚拟环境切换功能增强型Python插件:
实测,相同的功能(比如列出所有的虚拟环境),pyenv会比conda更快。
安装pyenv和pyenv-virtualenv插件
注1:本节假定你所使用的是zsh。 注2:pyenv本身不具备虚拟环境功能,需要额外安装pyenv-virtualenv插件
无论是macOS还是GNU/Linux,pyenv的安装其实都比较简单,只需要两次git clone和一次配置文件变更。
两次clone如下所示:
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv -b v2.0.0
git clone https://github.com/pyenv/pyenv-virtualenv.git $HOME/.pyenv/plugins/pyenv-virtualenv
一次配置变更如下所示(修改$HOME/.zprofile
):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# enable shims
eval "$(pyenv init –path)"
# enable autocompletion and all subcommands
eval "$(pyenv init -)"
# enable auto-activation of virtualenvs
eval "$(pyenv virtualenv-init -)"
## 使用pyenv
### 列出所有Python版本:pyenv versions
### 列出所有虚拟环境:pyenv virtualenvs
### 安装某个Python版本
conda create --prefix=$HOME/.pyenv/versions/3.9.4 python=3.9.4
这里安装具体的Python版本,采用conda而不是pyenv自带的pyenv install功能,是因为,pyenv install会从Python官网下载Python的源代码,然后构建安装,这个过程不可控,容易出问题。
### 基于具体的Python版本创建虚拟环境
pyenv virtualenv 3.9.4 py39
### Python虚拟环境或者版本的自动切换
mkdir /tmp/py39-test
cd /tmp/py39-test
pyenv local py39
cat .python-version
# Exit and then Relaunch iTerm
cd /tmp/py39-test
手动操作的话,可以进入相关目录之后pyenv activate py39
。采用pyenv local [env-name],可以将所使用虚拟环境名字写入到项目目录的.python-version
文件里面。每次进入这个项目,pyenv通过检测.python-version
,可以自动切换到相应的虚拟环境。
在Apache Airflow和Apache Superset的.gitignore里面,我们可以看到.python-version都是被排除了的。
python版本切换和虚拟运行环境-pyenv, virtualenv
2017.05.04 10:07:45字数 1,148阅读 5,159
pyenv是python版本管理和切换工具
经常遇到这样的情况:
- 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性;
- 系统自带的 Python 是 2.x,自己需要 Python 3.x;
此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现 Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。 pyenv用于在一台机器上安装多个版本的python环境, 并提供方便的切换方法。 我们可以用pyenv 安装多个版本python , 比如2.6, 2.7, 3.3 三个版本。 用户可以随意切换当前默认的python版本,且不影响系统的python版本。
virtualenv是python虚拟运行环境管理和切换工具
pyenv可以安装多个版本的python,但每个版本的运行环境仍是唯一的, 如果我们想在环境中安装一些包/模块的话, 会导致这个版本的运行环境被修改,当多人或多个项目共用同一python版本时,可能会有包冲突问题。 例如:项目A需要jinja 2.7,而项目B需要jinja 2.6怎么办? virtualenv可以搭建虚拟且独立的python运行环境(原理很简单,就是把系统python或者pyenv安装的python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境),可以使每个项目库环境与其他项目独立开来,保持环境的干净,解决包冲突问题。 pyenv的插件pyenv-virtualenv使得我们可在pyenv下直接使用virtualenv,最终满足创建任意python版本下任意独立环境的需求。
安装pyenv和pyenv-virtualenv插件
虽然直接安装pip安装virtualenv也行,但是通过pyenv插件的形式安装virtualenv的虚拟环境更加方便,因为之后的操作会比较方便。 方法1: 直接用pyenv-installer脚本安装到~/.pyenv/下
$ curl -o pyenv-installer.sh -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer
$ bash pyenv-installer.sh
方法2: 用如下修改后的pyenv-installer脚本安装,唯一不同是指定了安装路径/data/yourname/.pyenv/,并软连到/.pyenv,然后按提示把环境变量修改加入/.bash_profile ,然后重启终端就可以了:
#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="/data/`whoami`/.pyenv"
fi
ln -s $PYENV_ROOT ~/
shell="$1"
if [ -z "$shell" ]; then
shell="$(ps c -p "$PPID" -o 'ucomm=' 2>/dev/null || true)"
shell="${shell##-}"
shell="${shell%% *}"
shell="$(basename "${shell:-$SHELL}")"
fi
colorize() {
if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
else echo -n "$2"
fi
}
checkout() {
[ -d "$2" ] || git clone --depth 1 "$1" "$2"
}
if ! command -v git 1>/dev/null 2>&1; then
echo "pyenv: Git is not installed, can't continue." >&2
exit 1
fi
if [ -n "${USE_GIT_URI}" ]; then
GITHUB="git://github.com"
else
GITHUB="https://github.com"
fi
checkout "${GITHUB}/yyuu/pyenv.git" "${PYENV_ROOT}"
checkout "${GITHUB}/yyuu/pyenv-doctor.git" "${PYENV_ROOT}/plugins/pyenv-doctor"
checkout "${GITHUB}/yyuu/pyenv-installer.git" "${PYENV_ROOT}/plugins/pyenv-installer"
checkout "${GITHUB}/yyuu/pyenv-update.git" "${PYENV_ROOT}/plugins/pyenv-update"
checkout "${GITHUB}/yyuu/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"
checkout "${GITHUB}/yyuu/pyenv-which-ext.git" "${PYENV_ROOT}/plugins/pyenv-which-ext"
if ! command -v pyenv 1>/dev/null; then
{ echo
colorize 1 "WARNING"
echo ": seems you still have not added 'pyenv' to the load path."
echo
} >&2
case "$shell" in
bash )
profile="~/.bash_profile"
;;
zsh )
profile="~/.zshrc"
;;
ksh )
profile="~/.profile"
;;
fish )
profile="~/.config/fish/config.fish"
;;
* )
profile="your profile"
;;
esac
{ echo "# Load pyenv automatically by adding"
echo "# the following to ${profile}:"
echo
case "$shell" in
fish )
echo "set -x PATH \"${PYENV_ROOT}/bin\" \$PATH"
echo 'status --is-interactive; and . (pyenv init -|psub)'
echo 'status --is-interactive; and . (pyenv virtualenv-init -|psub)'
;;
* )
echo "export PATH=\"${PYENV_ROOT}/bin:\$PATH\""
echo "eval \"\$(pyenv init -)\""
echo "eval \"\$(pyenv virtualenv-init -)\""
;;
esac
} >&2
fi
在.bashrc或.bash_profile设置环境变量:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" # 这句可以不加
使用
初始化虚拟环境
初始化环境:
查看已安装的 python 版本和当前版本(默认是system版本;virtualenv生成的虚拟运行环境也是用一个版本表示的,但是system不是一个虚拟环境)
查看可以安装的python版本
安装编译python的依赖库
CentOS/RHEL/Fedora:
sudo yum install readline readline-devel readline-static
sudo yum install openssl openssl-devel openssl-static
sudo yum install sqlite-devel
sudo yum install bzip2-devel bzip2-libs
Ubuntu:
sudo apt-get update
sudo apt-get install make build-essential libssl-dev zlib1g-dev
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
sudo apt-get install llvm libncurses5-dev libncursesw5-dev
安装指定python版本,采用的是编译安装方式
执行上面命令后,会从给定的网址中下载安装文件Python-2.7.12.tar.xz。但由于文件很大,下载需要很久。建议做法是:先执行以上命令然后马上中断安装,这样就知道 pyenv 要下载的文件的链接。然后用户自己用其他更快的方式(比如wget、迅雷等等)从该链接中下载安装文件(最好选择镜像对应地址下载, 例如:http://mirrors.sohu.com/python/),并将安装文件移动到 ~/.pyenv/cache 目录下(该目录默认不存在,用户要自行新建),再执行上面的命令。编译安装本身也需要较长时间。默认安装路径是~/.pyenv/versions/2.7.12/
检查、安装虚拟运行环境:
查看现有虚拟运行环境: pyenv versions,会列出所有版本,其中包括了虚拟运行环境的虚拟版本
新建虚拟运行环境(初次执行会安装virtualenv): pyenv virtualenv 2.7.12 env.1
激活虚拟运行环境: pyenv activate env.1
安装自己需要的第三方包:
pip install -r $ABSOLUTE_PATH/$PUBLIC_REQUIREMENTS_FILE
pip install -r $ABSOLUTE_PATH/$PRIVATE_REQUIREMENTS_FILE --no-cache-dir --no-index -f $PIPPACK_DIR
更新数据库, 在安装 Python 或者其他带有可执行文件的模块之后,需要对数据库进行更新::
pyenv rehash
执行上面命令后,虚拟运行环境会新建目录: ~/.pyenv/versions/2.7.12/envs/env.1(此目录下有bin,include和lib文件夹), 同时生成软连~/.pyenv/versions/env.1指向此目录,运行pyenv versions命令,可以显示出2.7.12/envs/env.1和env.1两个版本。第三方包安装在/.pyenv/versions/2.7.12/envs/env.1/lib/python2.7/site-packages/下面。
切换虚拟环境
初始化环境:source ~/.bash_profile
激活环境: pyenv activate env.1
使用此虚拟环境的python: python my_task.py
退出虚拟环境
删除虚拟环境
其他功能
pyenv uninstall 卸载某个版本
pyenv update 更新 pyenv 及其插件
参考
Python 多版本共存之 pyenv 使用pyenv和virtualenv搭建python虚拟环境 Python多版本切换工具-Pyenv\virtualenv及Anaconda科学计算环境的配置 pyenv本地安装python
最近家里搞了一台电脑,装的linux mint发行版。折腾了一下安装python,这里整理一下教程。还记得以前整理过centos7上编译安装python,各种问题。这里不多说,直接上教程。本教程支持腾讯云、阿里云、官方下载镜像。
为了测试我这里专门开了一台腾讯云。见图一
图一
此环境为新装的ubuntu。
首先备份并更换为阿里云源,这根据不同的机器网络所需要的时间是不同的。我因为是腾讯云的机器,在这里就不需要运行了。这个针对的是国内某些idc的机器,用的官方源,在一些网络环境下,下载速度会很慢,会导致接下来下载我们安装python编译所需要的库很慢,浪费时间。
#备份阿里云源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#写入数据到/etc/apt/sources.list文件
sudo cat > /etc/apt/sources.list<< EOF
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse
EOF
sudo apt update -y
sudo apt upgrade -y
在这里代码我修改了一下网上的,直接cat写入多行,不需要单独vi进去修改文件了。
接着,你需要安装一些常用的包,之前遇到的一些镜像比较精简,连ping功能都没有,这里我都加上了。视情况你可以选择不要。
sudo apt-get install -y wget vim git curl screen htop jq iftop net-tools inetutils-ping
安装依赖包 这里我把常用的依赖都整理出来了,有遇到过安装成功了但是django使用sqlite3数据库但是没装libsqlite3-dev跑不了的情况。
sudo apt-get install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libxml2-dev libxmlsec1-dev
开始克隆pyenv 如果遇到不可抗力因素,gayhub访问不了,可以使用下面这个命令,这个是一个镜像站。当然你也可以接入proxy
git clone --depth 1 https://github.com/pyenv/pyenv.git ~/.pyenv
#git clone --depth 1 https://github.com.cnpmjs.org/pyenv/pyenv.git ~/.pyenv
图2 为pyenv clone成功的截图
pyenv安装完成后,我们还需要安装一下virtualenv,这货创建了一个虚拟化的python运行环境,用于解决不同项目之间的依赖问题。
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
#git clone https://github.com.cnpmjs.org/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
图3 为virtualenv clone成功的截图
pyenv和virtualenv都安装完成后,我们需要修改环境变量。如果你没像我一样装zsh,就修改~/.bashrc文件,如果装了,需要修改~/.zshrc。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
修改完成后,你需要启用环境变量
图4 为修改环境变量截图
查看pyenv是否安装成功
图5 查看pyenv版本
下面就是安装python了,输入pyenv install -l 查看可安装的python版本
图6 查看可安装的python版本
这里我们选择安装3.10.2
如果顺产,你这个时候已经安装好了。
图7 卡下载截图
什么,你和我一样卡下载了吗?这是因为国内网络下载python官方源卡顿,这个时候我们同样需要镜像的办法解决。这里使用的淘宝源
v=3.10.2;wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
图8 使用镜像成功下载截图
这一下就顺畅了许多呢~
图9 安装成功截图
初始化一个virtualenv环境
pyenv virtualenv 3.10.2 dev
激活环境
图10 运行python截图
输入python,现在版本切换到了3.10.2,同时也可以虚拟环境。~
有bug和其他问题可以在评论区留言,尽力解决~
如果有帮助到你,请点赞收藏让更多人的人看到,谢谢咯~
2018.04.24 23:17:57字数1223阅读841
前言
以下采用的版本设置均可以参考tensorflow官网然后选择相应的CUDA以及cuDNN版本。另外说一句发现再这用锚点很难受。想要更好的阅读体验请直接访问我的博客 配置说明
Ubuntu 16.04, NVIDIA GTX 1060
搭建目标
CUDA 8.0, cuDNN 5.1, Tensorflow-gpu(本文目前只是1.2,浏览TensorFlow官网获取其他版本。注意与CUDA和cuDNN对应), Keras
做任何操作之前请看文章大纲!
接下来会做什么?
- pyenv安装以及常见命令
- 安装Anaconda
- 安装GPU驱动以及装载CUDA
- 设置cuDNN
- 创建环境安装TensorFlow-GPU
- 安装Keras
- [Keras demo
- 常见问题列表
pyenv安装以及常见命令
首先介绍pyenv是什么东西?可以简单理解为一种能够管理多种python环境方便我们不同需求下运行不同的python并且全局设定。具体详情可以参见pyenv-github
-
安装git
-
开始装pyenv
1. $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
2. $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
3. $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
4. $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
重启终端即可。
3. 查看可安装列表
$ pyenv install --list
4. 安装Python的依赖包
1. $ sudo apt-get update
2. $ sudo apt-get install make build-essential libssl-dev zlib1g-dev
3. $ sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
4. $ sudo apt-get install llvm libncurses5-dev libncursesw5-dev
安装Anaconda
Anaconda是专门为了科学计算所封装的常用的python的数据包例如(numpy…) 其主要内容请Anaconda参考官网,考虑到国内网速比较慢甚至可能会导致中途失败,以下均用清华镜像 tuna(以下参考下载Anaconda3-5.1.0-Linux-x86_64.sh 备用)
1. $ cd ~/.pyenv
2. $ sudo mkdir cache
3. $ cp Anaconda3-5.1.0-Linux-x86_64.sh ~/.pyenv/cache
4. $ pyenv install anaconda3-5.1.0
5. $ pyenv rehash
参考常用命令
1. $ pyenv versions
2. $ pyenv install --list
3. $ pyenv install xxxx
4. $ pyenv uninstall xxxx
5. $ pyenv global 环境名称
6. $ pyenv local 环境名称
安装GPU驱动以及装载CUDA
1. 卸载原有驱动(针对之前有驱动的情况)
1. $ sudo apt-get remove --purge nvidia*
2. $ sudo chmod +x *.run #赋给.run运行的权限
3. $ sudo ./NVIDA-Linux-x86_64-390.48.run --uninstall #具体版本参考自己的GPU型号去官网查询
2. 禁止nouveau驱动
1. $ sudo gedit /etc/modprobe.d/blacklist.conf
2. # 将下面的两句话加入这个配置文件中保存
3. blacklist nouveau
4. options nouveau modeset=0
修改后执行sudo update-initramfs -u
重启电脑后,输入lsmod | grep nouveau
。如果屏幕没有任何信息输出,说明禁止成功。
3.禁止X-windows服务
1. $ sudo service lightdm stop #会关闭图形化界面
2. # 然后Ctrl + Alt + F1 切换到到命令行界面 然后利用账户和密码登录
Tips: sudo service lightdm start 开启 Ctrl + Alt + F7 即可以切换回去。
4. 命令行驱动安装
$ sudo ./NVIDA-Linux-x86_64-390.48.run --no-opengl-files #不需要安装额外的OpenGL库(ubuntu本身已经有了)
一直看着提示安装,如果出现错误(32bit 兼容…)忽略不计,或者多次反复安装即可。
驱动测试
1. $ nvidia-smi
3. $ nvidia-settings
5. 安装CUDA
首先官网下载好对应的.run文件 详情请看nvida CUDA
$ sudo ./cuda_8.0.61_375.26_linux.run --no-opengl-libs
然后根据提示进行安装 以下是我的选择
1. $ accept
2. $ n
3. $ y
4. $ <Enter>
5. $ <Enter>
6. $ y
7. $ y
测试CUDA Sample
编译以及测试deviceQuery
1. $ cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
2. $ sudo make
3. $ ./deviceQuery
编译以及测试bandwidthTest
1. $ cd ../bandwidthTest
2. $ sudo make
3. $ ./bandwidthTest
如果两个的结果均为 Result = PASS,说明到现在我们已经完成了CUDA的安装
设置cuDNN
这里的主要工作是关联动态链接。
下载cuDNN 需要先注册账户
首先我们需要下载相应的cuDNN,我这里下载的是cuDNN v5.1 Library Linux
即cudnn-8.0-linux-x64-v5.1.tgz,其他请参考官网cuDNN版本库
由于我安装发现在我的``/usr/local/下会出现cuda以及
cuda-8.0`,所以我建议下面的操作两个都需要试试(视情况而定)。
解压下载的cudnn
得到cuda
这个文件夹并且进入进行一下操作
1. $ sudo cp include/cudnn.h /usr/local/cuda(需要后面都替换为cuda-8.0,后面都需要做两次)/include/ #复制头文件
2. $ sudo cp lib64/* /usr/local/cuda/lib64/
3. $ cd /usr/local/cuda/lib64
4. $ sudo ln -sf libcudnn.so.5.1.10 libcudnn.so.5 #这里生成软链接 根据自己下载cudnn版本不同 其数字会有所不同
5. $ sudo ln -sf libcudnn.so.5 libcudnn.so
6. $ sudo ldconfig -v #生成链接
7. $ ls # 查看一下当前目录下是否存在上面的so文件以及是否会有红色(表示链接错误)
创建环境安装TensorFlow-GPU
1. 安装pip
$ sudo apt-get install python-pip
2. 利用anaconda安装TensorFlow-GPU
首先需要根据CUDA和cuDNN选择相应的tensorflow版本 这里选择1.2 因为之前的驱动装的版本比较低,因为比较稳定。据你自己情况而定。
首先去看tensorflow官网不要去国内的网站中文网站,版本太低了。
查看Installing TensorFlow on Ubuntu
首先查看CUDA以及cuDNN版本要求。
点击右边目录中的Installing with Anaconda
创建anaconda环境(为TensorFlow做准备)
1. $ pyenv global anaconda-xxx-xx
2. $ conda create -n tensorflow(环境名称)
开启TensorFlow环境
1. $ source activate tensorflow
2. (tensorflow)$
安装TensorFlow-GPU
$ pip install --ignore-installed --upgrade tfURL
这里的tfURL
需要根据不同的python版本以及cpu或者GPU选择,查看侧边菜单就能找到
由于我这里anaconda-3.5
是python 3.6
所以就需要选择
GPU version:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.2.1-cp36-cp36m-linux_x86_64.whl
CPU version:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.2.1-cp36-cp36m-linux_x86_64.whl
然后等待安装(速度超级快!)
然后再尝试import tensorflow as tf
到这里会出现一些问题请参考后面的常见问题列表
安装Keras
到了这里应该是最简单的一步了。
1. $ source activate tensorflow
2. $ pip install keras
输入python
进入环境中
1. import tensorflow as tf
2. import keras
3. # 没有报错就完成了所有的搭建
Keras demo
1. $ git clone https://github.com/fchollet/keras.git
2. $ cd keras/examples/
3. $ python mnist_mlp.py
接下来你就会看见很酷的训练数据以及模型,没有任何错误即可。
常见问题列表
Q1:
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory
解决思路:仔细看提示则就是提示libcudart.so.8.0
不能打开共享链接,我们需要用一种方法找到这个东西(修改.bashrc
文件)
1. $ export LD_LIBRARY_PATH=/usr/local/cuda/lib64/
2. $ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64/
3. # 再次解释,由于我安装cuda之后就会出现这两个文件,防止错误 所以我进行了两次操作
Q2:
ImportError: libcudnn.5: cannot open shared object file: No such file or directory
解决思路:其实这里也应该是文件问题,并且这个文件是在前面生成的软链接,所以现在重新进行生成链接操作即可。
1. $ cd /usr/local/cuda/lib64或者cuda-8.0
2. $ ls # 查看这个文件是否存在,我当时是红色就说明有问题,然后删除
3. $ sudo ln -sf libcudnn.so.5.1.10 libcudnn.so.5 #这里生成软链接 根据自己下载cudnn版本不同 其数字会有所不同
4. $ sudo ln -sf libcudnn.so.5 libcudnn.so
5. $ sudo ldconfig -v #生成链接
6. # 注意这里依然在cuda-8.0和cuda都进行一次。
最后
有问题可以留言 & 欢迎交流。