写python代码的人都知道,一个项目写下下来,不可避免的都需要使用很多第三方包,通常我们都是通过pip install ,然而当我们需要上线的时候问题来了,如果中间你自己不记得自己安装了多少个包,这个时候你就面临着需要导出包名字,这个时候你可能想到了 pip freeze > requirements.txt,但是实际开发中你可能会开发很多个项目,每个项目可能都是pip安装了一堆包,如果每次都是这样,导出的包会越来越多。并且多个项目之间并不能很好的隔离,并且可能你每个项目中用的python环境不同,包的版本不同,而这在后期可能造成很多不可预知的麻烦。这个时候我们就需要用到python的虚拟环境啦
 

虚拟环境virtualenv

不同的项目使用不同版本的某些包,可能某些原因使用旧版本的包还不能升级,所以这个时候我们可以通过虚拟环境来解决这个问题。我们需要安装一个特殊的包:virtualenv
 
安装:pip install virtualenv,如下图所示表示安装成功

创建虚拟环境

命令:virtualenv venv

执行这个命令会默认在当前目录创建一个虚拟环境venv 目录,这里包含了Python可执行文件,常用的标准库,激活virtualenv环境脚本的目录,激活virtualenv环境的脚本在下图目录中的Scripts目录中的activate,执行这个程序就可以激活

当我们激活虚拟环境后,会出现如下图所示,标注的部分就表示你已经进入了虚拟环境。如果想要退出虚拟环境需要执行deactivate

在虚拟环境中你的环境和你本机的python环境是隔离的如果你在虚拟环境中通过pip安装包只会安装在你这个虚拟环境目录下,并不会安装到你的电脑

python环境下

但是如果仅仅是这个模块好像是没那么方便,这里我们需要再安装一个模块virtualenvwrapper,其实这个是对virtualenv模块的扩展,让你更加方便的管理和创建虚拟环境

virtualenvwrapper模块

virtualenvwrapper是对virtualenv的功能扩展,它可以帮我们:

管理全部的虚拟环境

更加方便的创建,删除和拷贝虚拟环境

安装:pip install virtualenvwrapper

为了方便管理需要在环境变量里添加一个环境变量,这里我创建一个目录,用于存放所有的虚拟环境,我这里用的是E:\venv_project目录

安装完成virtualenvwrapper 之后,我们就有了几个命令可以用:

mkvirtualenv :创建虚拟环境

lsvirtualenv:列出全部的虚拟环境

showvirtualenv:列出单个虚拟机环境的信息

rmvirtualenv:删除一个虚拟环境

cpvirtualenv:拷贝一个虚拟环境

allvirtualenv:对当前虚拟环境执行统一的命令

cdvirtualenv:可以直接切换到虚拟环境的子目录里

cdsitepackages:和cdvirtualenv同理,切换到虚拟环境的site-packages目录下

lssitepackages:列出site-packages目录下的目录

上述命令的简单实用例子:

因为上面已经提前添加了WORKON_HOME环境变量,所以我们通过mkvirtualenv命令创建的虚拟环境都会创建到这个目录下,

这里还有一个命令:workon命令可以列出所有的虚拟环境

我们通过mkvirtualenv创建虚拟环境,并通过通过workon命令可以查看我们创建的所有虚拟机环境,以及通过workon命令在不同的虚拟环境中迅速切换

这样虚拟环境就安装完成了

总结

通过上面的虚拟环境,我们每个项目都可以运行在独立的python环境中,也不用担心不同项目之间python包的干扰,还能保证你本地测试环境的代码完全和上线时是一致的

再也不用因为在测试环境好好地,放到线上各种奇怪的问题 ,如下图上线之后很多程序员发现bug的感觉:

一篇文章帮你解决python的包管理的更多相关文章

  1. 一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接

    [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...

  2. Python的包管理工具Pip (zz )

    Python的包管理工具Pip 接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_ins ...

  3. Python的包管理

    0.Python的包管理 在刚开始学习Python的时候比较头疼各种包的管理,后来搜到一些Python的包管理工具,比如setuptools, easy_install, pip, distribut ...

  4. Python的包管理工具

    Python的包管理工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么使用包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了. 但是为了 ...

  5. Python PIP包管理器

    版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...

  6. Python之包管理工具:distutils、setuptools、distribute、setup.py、easy_install、easy_install、pip

    在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_install和pip等等. 介绍:htt ...

  7. 【转载】Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_install和Pip.不过,我没有细 ...

  8. Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem非常好用,而且有非常完备的文档系统http://rdoc.info 发现Python下也有相同的工具,包含easy_install和Pip.只是,我没 ...

  9. 5、Python之包管理工具pip

    pip提供我们各色各样的软件(第三方库),而这些第三方库又可以给我们实现各种各样不同的功能,科学计算.画图.操作文件.聊天-- 我们可以通过Cmd终端.Pycharm.Jupyter三种平台使用pip ...

随机推荐

  1. Hibernate学习笔记(6)---Criteria接口

    Criteria接口 Criteria查询通过面相对向的设计,将数据查询条件封装为一个对象.在hibernate执行时会把criteria指定的查询恢复相应的sql语句. 条件查询 Criteria ...

  2. android应用开发基础知道

    1.理解android linux是由c语言和汇编语言写的操作系统,android是基于linux内核的操作系统.发者可以使用Java或C/C++开发Android应用. 2.android环境搭建 ...

  3. Java学习笔记23(Calendar类)

    Calendar意味日历,对Date类中的很多方法做了改进 Calendar类是一个抽象类,不可以见对象,需要子类完成实现 不过这个类有特殊之处,不需要创建子类对象,而是使用它的静态方法直接获取: 示 ...

  4. hdf5 AttributeError: 'UnImplemented' object has no attribute 'read'

    问题现象:最近在用pandas分析数据时,用hdf5存储结果,当我监听不同文件时,多个进程同时写入hdf5(save到不同group)时,报hdf5 AttributeError: 'UnImplem ...

  5. 简易安卓APP

    简介 现在来分享期末做的安卓大作业--生活百科. 本项目只是单纯的一个大作业,没有考虑实际的需求,所以有设计不合理的地方,请见谅. 这个项目有三大功能(因为是使用了侧边栏所以是可以继续往里面添加功能的 ...

  6. C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了.这章正如我标题所写的,是C语言在文件上的操作.学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的 ...

  7. Python线程:线程的调度-守护线程

    Python线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread. ...

  8. 5.移植uboot-设置默认环境变量,裁剪,并分区

    在上一章,我们使用网卡传输文件,每次启机时,环境变量都要变为默认值,需要重新设置ip,MAC地址才行,由于没有配置mtdparts命令,启动内核也不成功 所以本章主要学习: 1)修改环境变量默认值 2 ...

  9. Inno Setup 自定义界面心得

    因为项目需要,需要打 windows 安装包,要求安装界面完全按照需求来.作为没接触过这块儿的服务端宝宝,在此期间踩了很多坑. 坑不提也罢,最终结果圆满,记录下与大部分网上PO出来的做法不太一样的小心 ...

  10. 表单中GET与POST的区别

    1.本质 Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求. 2.服务器端获取值的方法 get方式提交的数据,服务器端使用request.QueryString获取变量的值 ...