Python生态圈
Posted November 26, 2015
版本
- python2.6(不推荐)
- python2.7
- python3.0(强力推荐)
PYTHONPATH变量
PYTHONPATH
是一个可以用来增强默认包检索路径的环境变量
在某些情况下,你不用覆盖已有的PYTHONPATH,只需要在开头或结尾加上新的路径即可。
同时在python代码里面也可以使用sys.path.insert
来动态添加搜索路径. 无论是通过环境变量PYTHONPATH
还是通过sys.path.insert
都不建议你这样做. 按照python规范好的路径来开发不然维护性要加大.
第三方包
在Linux系统上,至少有3种安装第三方包的方法。
- 使用系统本身自带的包管理器(deb, rpm等)
- 通过社区开发的类似pip, easy_install等多种工具
- 从源文件安装
三种方法都会安装所需的依赖包, 并处理好依赖程序, 同时遵守python的搜索路径.
如果找到合适的包
非root pip安装权限问题
当没有root权限是不能在系统层面安装python包的, 这时候可以采取虚拟环境的方式或者加入--user
参数。
默认python的搜索路径里有宿主目录下的~/.local/lib/python2.7/site-packages
目录, --user
参数的作用也就是安装到这个路径里面.
当然也可以在root环境下安装virtualenv
下节讲
virtualenv 虚拟环境
Python社区中设置开发环境的最受欢迎的方法,是通过virtualenv。Virtualenv是一个用于创建孤立Python环境的工具。那么现在问题来了:为什么我们需要孤立的Python环境?要回答这个问题,请允许我引用virtualenv的官方文档。
我们要解决的问题之一,就是依赖包和版本的管理问题,以及间接地解决权限问题。假设你有一个应用需要使用LibFoo V1,但是另一个应用需要V2。那么你如何使用两个应用呢?如果你把需要的包都安装在/usr/lib/python2.7/site-packages(或是你的系统默认路径),很容易就出现你不小心更新了不应该更新的应用。
简单来说,你的每一个项目都可以拥有一个单独的、孤立的Python环境;你可以把所需的包安装到各自孤立的环境中。
进入虚拟环境
进入环境后终端的提示符, 会有关于所在虚拟环境的标示, 这里我的标示就是my_env
到了这里, 使用pip安装都会安装到./lib/python2.7/site-packages/
里面, 可以看下我们使用的pip命令和python命令位置, 已经完全和系统的python环境分离. 甚至可以看到python的搜索路径.
退出虚拟环境
如果需要回到系统环境
默认虚拟环境里面可以使用系统环境的包
注意:系统Python环境中安装的所有包,默认是可以在虚拟环境中调用的。这意味着,如果你在系统环境中安装了simplejson包,那么所有的虚拟环境将自动获得这个包的地址。你可以在创建虚拟环境时,通过添加--no-site-packages
选项,取消这个行为,就像这样:
virtualenvwrapper
virtualenvwrapper
是virtualenv 封装后的工具集
安装
安装后此工具提供这个bash 方法文件
其实需要用到的就一个virtualenvwrapper.sh
, 所有封装好的工具都是此bash脚本里面的函数, 所以我们要使用必须要source
加载一下,找到它的位置, 加到~/.bashrc
里面每次进入系统自动加载.
这样只要每次登陆系统就可以使用里面的工具集了, 这里说下virtualenvwrapper
提供了哪些方法.
注意:mkvirtualenv
同时支持virtualenv
参数, 所以前面讲的--user
和--no-site-packages
参数同时也会支持, 看到这里相信你知道这个工具只是对virtualenv
做了封装了吧, 所以最好每次只需要安装virtualenvwrapper
就行了, 依赖包virtualenv
会自动安装.
通过pip和virtualenv进行基本的依赖包管理
virtualenv虚拟环境的确是开发环境的好东西, 但是不只是仅仅开发环境, 线上部署多应用的时候同样需要多虚拟环境同时存在. 如果我们在虚拟环境开发完了, 可以直接把依赖的包提取出来, 也就是打包的范畴了. Python项目里都存在一个requirements.txt
文件, 好像成了标准规范. 幸运的是pip freeze
命令支持直接生成.
编辑器推荐
个人比较倾向vim, 还有支持自动补全的 PyCharm, 你应该选择最合适的编辑器.