zoukankan      html  css  js  c++  java
  • #Python学习#python虚拟环境——virtualenv

    前言

    在Ubuntu系统中,系统一般会默认安装python2.x和3.x,像我近期买的阿里云ECS默认安装了2.7.2和3.5.2,所有pip安装的第三方包都会被放在默认的site-apckages目录下。

    如果我们在同一台机器上同时开发多个应用程序,问题一:python的版本问题,不同程序可能需要不同的版本;问题二:需要的不同第三方包管理,如果都放在一起总感觉不太好,强迫症。

    如果可以为每一个应用程序开辟一个独立的python运行环境就好了,所以就有了 virtualven

    下载virtualenv

    apt更新

    sudo apt-get update //更新软件源中的所有软件列表
    sudo apt-get upgrade //对照列表,更新已安装的软件
    

    pip安装virtualenv

    pip install virtualenv //不讨论pip和pip3问题,
    

    使用virtualenv

    新建项目目录

    sudo mkdir myproject 
    cd myproject
    

    创建虚拟环境

    virtualenv -p /usr/bin/python3.5 --no-site-packages venv
    
    

    一般项目的虚拟环境命名为venv。参数解释:

    • -p /usr/bin/python3.5,-p指定解释器路径,可以指定虚拟环境python版本。
    • --no-site-packages,已经安装到系统Python环境中的所有第三方包都不会复制过来,得到一个不带任何第三方包的“干净”的Python运行环境。

    激活虚拟环境

    source venv/bin/activate
    

    通过source命令进入虚拟环境,注意到命令提示符有所变化,前面多了一个(venv),表示当前环境是一个名为venv的Python环境。

    安装第三方包

    pip install django
    

    在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。

    退出虚拟环境

    deactivate
    

    回到正常系统环境后,再使用pip安装的第三方包就会放在系统python环境中。

    virtualenv是如何创建“独立”的Python运行环境的?

    原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。所以想要创建虚拟环境,系统应该先安装该版本的python环境。

    项目移植

    在项目打包移植时可以抛弃虚拟环境(一般很大),利用命令生成项目所引用的第三方包,在项目部署时新建虚拟环境,重新下载这些第三方包即可。

    pip list //查看当前环境中安装的第三方库
    pip freeze > requirements.txt //导出当前环境第三方库信息
    pip install -r requirements.txt //移植机器重新安装第三方库
    

    总结

    virtualenv为应用程序提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。如果一台机子上有太多太多的项目,可以考虑使用virtualenvwrapper来统一管理。

    Python最强的IDE——PyCharm在创建项目时会自动创建虚拟环境,安装第三方包可以通过左上角file-settings-project interpreter,点击"+"号,搜索第三方包直接安装就好。

    参考链接

    virtualenv - 廖雪峰的官方网站:virtualenv

    python虚拟环境:virturlenv


    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    .Net程序员之Python基础教程学习----字典的使用 [Third Day]
    .Net程序员之Python基础教程学习----字符串的使用 [Second Day]
    .Net程序员之Python基础教程学习----列表和元组 [First Day]
    SQL--实现分页查询
    .Net程序员Python之道---Python基础
    C#基础----Linq之List<T>篇
    C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
    C#基础---事件的使用
    C#基础---委托的使用
    各种坑死爹的
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8892185.html
Copyright © 2011-2022 走看看