虚拟环境搭建相关

虚拟环境工具对比

目前接触的开发环境相关:

  • 系统开发环境:Windows、 linux(Ubuntu16.04 lts)、 mac os等
  • 虚拟机:vmware、docker
  • Python环境:python2/3、以及各种框架、包、模块的版本的选择

为什么需要使用虚拟开发环境?

1、主要原因:
为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。
python2和3存在不小的差异,并且,由于各种原因导致了Python 2和Python 3的长期共存(Python虽然现在比较火,但是也经历了)。在实际工作过程中,我们可能会同时用到Python 2和Python 3,因此,也需要经常在Python 2和Python 3之间进行来回切换。这就需要对python的版本进行管理,除此之外还需要对不同的软件包进行管理。大部分情况下,对于开源的库我们使用最新版本即可。但是,有时候可能需要对相同的Python版本,在不同的项目中使用不同版本的软件包。

2、简而言之:
我们在做不同项目(比如后面用的django1.11.4和在最新的2点几)的时候需要不同的项目依赖。

虚拟环境工具

pyenv-virtualenv

  • pyenv和virtualenv。前者用于管理不同的Python版本,后者用于管理不同的工作环境。

  • pyenv是一个Python版本管理工具,它能够进行全局的Python版本切换,也可以为单个项目提供对应的Python版本。
    使用步骤
    1、pyenv安装
    安装与相对环境变量配置方式:

  • curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash (主目录下会有个.pyenv的隐藏文件夹)

  • 将以下三条语句写入 ~/.bashrc :
    export PATH="/home/zhu/.pyenv/bin:PATH" eval "(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"

第二种是安装git之后,用git安装,不过配置环境变量时上面语句需要用echo 追加(>>)写入配置文件

  • 配置立刻生效
    source ~/.bashrc

  • 验证
    echo $PATH (第一个路径结尾有个shims就可以了)

  • 更新
    pyenv update (到这安装完成)

2、基本使用
使用pyenv安装Python

  • 依赖安装(python安装前提):
    sudo apt-get install libc6-dev gcc
    sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
  • 安装:
    慢方式:pyenv install 3.6.4 -v #-v 以日志模式显示安装过程(国外服务器下载)
    快方式:下载至本地再安装
    cd ~/.pyenv
    sudo mkdir cache(临时文件夹,随便起个名都行)
    wget -c http://mirrors.sohu.com/python/3.6.4/Python-3.6.4.tar.xz -P ~/.pyenv/cache/
    pyenv install 3.6.4 -v
  • 查看支持Python版本 pyenv install --list
  • 列出pyenv中所有可用的python版本 pyenv versions
  • 指定python版本 pyenv global 3.5.4(版本相关依赖随之切换,避免了不同版本在系统中产生干扰)
  • 删除指定版本 pyenv uninstall 3.5.4
注意:
    - 使用pyenv管理python,必须是用pyenv安装的python才行,系统以前有的,需要重新用pyenv安装
    - 使用pip安装第三方模块时会安装到~/.pyenv/versions/xxx下,不会和系统模块发生冲突;
    - 使用pip安装模块后,可能需要执行pyenv rehash更新数据库。
    - 配置环境变量(写入方式注意与下载方式结合,不然会出诡异的错误) 

virtualenv本身是一个独立的工具,用户可以不使用pyenv单独使用virtualenv。但是,如果使用了pyenv,就需要安装pyenv-virtualenv插件而不是virtualenv软件来使用virtualenv的功能。(https://github.com/yyuu/pyenv-virtualenv

  • 安装virtualenv:pip install virtualenv 然后合适的位置建个项目目录如myproject
  • 进入myproject ,创建项目的虚拟环境:pyenv virtualenv python版本号 虚拟环境名 (python版本必须是安装过的,环境名随便起,只要能记住python版本就好)
  • 进入环境:pyenv activate 环境名
  • 退出环境:pyenv deactivate 环境名

virtualenv-virtualenvwrapper

1、安装
pip install virtualenv
pip install virtualenvwrapper

2、查看路径
type virtualenvwrapper.sh

3、配置
vi ~/.bashrc
# 文件最后添加:
export WORKON_HOME=~/.virtualenv
source /usr/local/bin/virtualenvwrapper.sh
(若在pip下载后,找不到/usr/local/bin/virtualenvwrapper.sh路径的文件,使用 find / -name virtualenvwrapper.sh 寻找该文件路径,原因可能是因为之前安装过pyenv-virtualenv)
4、创建对应目录
mkdir ~/.virtualenv

5、刷新环境
source ~/.bashrc

6、创建虚拟环境
mkvirtualenv axf -p /usr/bin/python3

7、简单使用

  • 创建虚拟环境 mkvirtualenv [版本] vir_name
  • 进入虚拟环境 workon vir_name
  • 退出环境:deactivate

pipenv(号称最好用的python虚拟环境和包管理工具)

为什么说它最好?
我们常用virtualenv搭建虚拟环境,管理python版本,但是跨平台的使用不太一致,且有时候处理包之间的依赖总存在问题
github上星星数:
virtualenv 3K
pyenv 14.9K
pipenv 16.5K

pipenv主要有以下特性:

(1)pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。

(2)过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock,后者存放将包的依赖关系,查看依赖关系是十分方便。

(3)各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。。

(4)通过加载.env文件简化开发工作流程。

(5)支持Python2 和 Python3,在各个平台的命令都是一样的。

1、安装
pip/pip3 install pipenv
2、使用

  • 在合适位置创建项目目录如:根目录下:mkdir project

  • 进入 project:cd project

  • 初始化虚拟环境: pipenv install

  • 简单使用,举个栗子:
    打开pycharm,打开project目录,新建个pachong.py,导入requests库,并不能用
    回到终端,安装requests库 :pipenv install requests,这时pycharm中的requests库就能用了

  • 指明只安装在开发环境中(--dev) pipenv install --dev requests --three

指明前Pipfile显示
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
requests = "*"

[requires]
python_version = "3.5"

指明后Pipfile显示
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
requests = "*"

[packages]
requests = "*"

[requires]
python_version = "3.5"

  • pipenv可以像virtualenv一样用命令生成requirements.txt 依赖文件 (pipenv graph可以查看安装依赖)
    pipenv lock -r --dev > requirements.txt

  • virtualenv中生成依赖文件 pip freeze > reqirement.txt
    pip install -r reqirement.txt

项目地址:https://github.com/pypa/pipenv
文档地址:https://docs.pipenv.org/

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

推荐阅读更多精彩内容