开发者社区> icoders> 正文

一篇文章帮你解决python的包管理

简介: 写python代码的人都知道,一个项目写下下来,不可避免的都需要使用很多第三方包,通常我们都是通过pip install ,然而当我们需要上线的时候问题来了,如果中间你自己不记得自己安装了多少个包,这个时候你就面临着需要导出包名字,这个时候你可能想到了 pip freeze > requirements.txt,但是实际开发中你可能会开发很多个项目,每个项目可能都是pip安装了一堆包,如果每次都是这样,导出的包会越来越多。
+关注继续查看
写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多线程爬虫编程中queue.Queue和queue.SimpleQueue的区别和应用
在Python中,queue模块提供了多种队列类,用于在多线程编程中安全地交换信息。其中,queue.Queue 和queue.SimpleQueue 是两个常用的先进先出(FIFO)的队列类,它们有以下区别和优缺点: queue.Queue 是一个更复杂的队列类实现涉及到多个锁和条件变量,因此可能会影响性能和内存效率。 SimpleQueue 是一个更简单的队列类它只提供了put()和get()两个方法,并且不支持maxsize参数
41 0
Python编程:MySQLdb模块对数据库的基本增删改查操作
Python编程:MySQLdb模块对数据库的基本增删改查操作
38 0
Python编程:entry_points将Python模块转变为命令行工具
Python编程:entry_points将Python模块转变为命令行工具
31 0
Python编程:SQLAlchemy查询数据没有变化
遇到一个问题,使用一条相同的sql,多次查询数据库,每次数据都一样,而且数据库更新了,也没有查到新数据 经过Google,发现是SQLAlchemy的缓存机制导致的 设置隔离级别参数isolation_level 就可以解决
33 0
Python编程:运行目录或zip压缩文件
Python编程:运行目录或zip压缩文件
23 0
Python编程:PyThink数据库交互模块提高爬虫编写速度
Python编程:PyThink数据库交互模块提高爬虫编写速度
27 0
Python编程:glob模块进行文件名模式匹配
Python编程:glob模块进行文件名模式匹配
22 0
Python编程:heapq模块堆排序
堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。 整个堆的最小元素总是位于二叉树的根节点。 python的heapq模块提供了对堆的支持。 堆数据结构最重要的特征是heap[0]永远是最小的元素
19 0
Python编程:实现消息发布/订阅模型
Python编程:实现消息发布/订阅模型
29 0
+关注
icoders
python服务端开发,主要通信方面开发,freeswitch asterisk 最近学习go
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Python系列直播第一讲——Python中的一切皆对象
立即下载
Python 脚本速查手册
立即下载
From Python Scikit-Learn to Sc
立即下载