• 项目太多工作环境互相干扰?virtualenv 一招教你轻松解决。


    写在之前

    在上一篇文章 安装的 Python 版本太多互相干扰?以后再也不用担心这个问题了。 中我给大家介绍了一个 Python 版本的管理工具「pyenv」,可以很容易的安装不同的 Python 版本,进行全局的 Python 版本切换。就这么开开心心的解决了 Python 版本冲突的问题以后,又突然出现了一个新的问题摆上了桌面:假如你手里有两个项目,其中一个项目要求使用 django 1.5 这个版本,但是另外一个项目却要求使用 django 2.0 这个版本,该怎么办呢?

    显然此时如果全局安装 django,肯定是无法满足我们的这个需求。全局安装就安装一个版本,我总不能用另一个的时候把当前这个版本卸掉吧,这样的话那真是就麻烦到家了,这时候我又想到了 Python 的简洁优雅,省心省力,这个问题肯定有解,果不其然,又被我给找到了,这就是我今天要给大家说的「virtualenv」。

    「virtualenv」本身就是一个独立的工具,用来隔离不同项目的工作环境。因为上一篇文章所讲的「pyenv」也是用来隔离的,所以很多人容易把这两个搞混,所以在这里我先来说一下两者之间的区别。

    区别

    「pyenv」是用来管理不用版本的 Python,例如你做某个项目的时候需要用的是 Python 2.7.1 这个版本,但是呢你又想与时俱进,学习一下 Python3,这个时候你就可以用 pyenv 来管理这两个不同版本的 Python。

    「virtualenv」是用来隔离不同项目的工作环境,例如你手里的两个项目,用到的都是 Python 2.7.1,但是呢,其中一个项目需要使用 django 1.5,而另一个项目则需要使用 django 2.0,这个时候 virtualenv 横空出世,解决这个问题。

    可能到这敏锐的你已经发现,我们只需要把「pyenv」和「virtualenv」这俩工具组合起来,就能够让任意版本的 Python 和 任意版本的第三方库随意组合,这种随意组合保持着很高的灵活性,同时也避免了不同项目之间可能发生的工作环境的冲突。

    我在上面说过「virtualenv」是一个独立的工具,我们可以直接使用它。但是鉴于上一篇文章我们学习了 pyenv,本着学以致用,我们还是用 pyenv,我假设你已经学习了上一篇文章,系统中已经有了 pyenv,此时只需要安装 pyenv-virtualenv 这个插件即可。

    安装 pyenv-virtualenv

    安装 pyenv-virtualenv,手动安装和我们之前安装 pyenv 是一样的,从 GitHub 直接下载到本地,首先执行下面的命令:

    git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
    

    安装的过程如下所示:

    Cloning into '/Users/rocky/.pyenv/plugins/pyenv-virtualenv'...
    remote: Enumerating objects: 4, done.
    remote: Counting objects: 100% (4/4), done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 2009 (delta 0), reused 0 (delta 0), pack-reused 2005
    Receiving objects: 100% (2009/2009), 568.83 KiB | 171.00 KiB/s, done.
    Resolving deltas: 100% (1373/1373), done.
    

    我们可以看到上面已经安装成功,接下来我们要添加一下环境变量:

    echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
    

    环境变量配置成功,接下来我们要重新载入一下配置文件,在这里我们是直接推出以后重新登陆:

    exec "$SHELL"
    

    就这样,「pyenv-virtualenv」就安装完成了。同样我们可以通过命令行来验证一下它是否安装成功:

    pyenv help virtualenv
    

    显示的结果如下所示:

    Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name>
           pyenv virtualenv --version
           pyenv virtualenv --help
    
      -f/--force       Install even if the version appears to be installed already
    

    pyenv-virtualenv 的使用

    pyenv-virtualenv 安装成功以后,我们就可以给同一个 Python 创建不同的虚拟环境,比如像下面这样创建两个新的虚拟环境:

    pyenv virtualenv 2.7.1 project1
    pyenv virtualenv 2.7.1 project2
    

    我们可以用如下命令来查看已经创建好的虚拟环境:

    pyenv virtualenvs
    

    显示如下:

    2.7.1/envs/project1 (created from /home/rocky/.pyenv/versions/2.7.1) 2.7.1/envs/project2 (created from /home/rocky/.pyenv/versions/2.7.1)
    project1(created from /home/rocky/.pyenv/versions/2.7.1) 
    project2 (created from /home/rocky/.pyenv/versions/2.7.1)
    

    创建完上述的虚拟环境以后,我们就可以通过命令行来操作它,比如进入(activate)或者退出(deactivate)虚拟环境。当我们进入到虚拟环境的时候,左边会提示我们当前所在的环境,因为有时候我们的本地可能建了很多个虚拟环境,有提示的话可以防止你记错当前你进入的环境,人性化的一批,如下所示:

    pyenv activate project1
    

    上述意思是说进入到 project1 的虚拟环境。

    (project1) $ pip install django==1.5
    (project1) $ pyenv deactivate
    

    进入到 project1 的虚拟环境后,安装了 django 1.5 这个版本,然后退出 project1 这个虚拟环境。

    当然还是能装就能删,如果你看哪个环境不顺眼,想要删掉它,就用下面的命令:

    pyenv virtualenv-delete project1
    

    写在之后

    更多内容,欢迎关注公众号「Python空间」,期待和你的交流。

  • 相关阅读:
    Python 写一个俄罗斯方块游戏
    您能解决这3个(看似)简单的Python问题吗?
    Python selenium爬虫实现定时任务过程解析
    Python-Django-Ajax进阶2
    Python-Django-Ajax进阶
    Python 数据-入门到进阶开发之路
    Python-Numpy数组计算
    Python-Django-Ajax
    Python-web应用 +HTTP协议 +web框架
    Python-socketserver实现并发- 源码分析
  • 原文地址:https://www.cnblogs.com/Rocky0429/p/10100705.html
Copyright © 2020-2023  润新知