Python 生态[部分翻译]
Python 生态
适合于从 PHP,Ruby 其它语言转过来的web开发者,用于了解的Python生态环境
读者对象
不是关于Python编程,让你更深入了解Python本身。不适合不了解Python的读者。最好度过关于Python的书,比如 Lear Python the hard way .
假设环境使用的是Linux(ubuntu或者Debian) 或类 Linux 环境。作者不熟悉Win和Mac OS X 环境,它不同于跨浏览器开发。
关于安装Python的教程:
版本选择问题
Python 2.x 是当前广泛使用的,3.x版本是明日之星。
Python 3 和 2 还是有不同的,2.6 和 2.7 是当前较为流行的版本,大部分流行的包/框架/工具/套件/模块还未能 100% 兼容 Python 3.
所以,保守安全的做法是选择Python 2.x(具体的话就是 2.7.x 了)。
Python 3 耻辱墙 描述了各种包的兼容情况,如果选择3的话,建议先浏览一番。
Python 虚拟机的选择
CPython 是当前安装最多的一个版本,也是其它虚拟机的参考。
PyPy 是由 Python 写的,Jython 是由Java写的,且运行在 Java VM 平台上, IronPyton 是为 Microsoft .NET CLR 平台写的。
如果不是必要的话,CPython 是不二之选。
如果你还不知道怎么选择的话,那么使用 2.7.x 的 CPython 吧。
Python 的安装
大部分Linux/Unix平台是预装了Python的。
这个就不翻了。。。。
理解包
对于Python 你需要理解的是Python 是没有包管理工具的,事实上包的概念在Python中是很若的。
Python 是用模块来管理代码的。一个模块可以是一个单独的文件只包含一个功能,或者是一个目录包涵一个或多个子模块。包和模块的区别很小,每一个模块可以看作是一个包。
包和模块的不同是什么? 先来理解下Python是如何找到模块的吧。
在任何编程环境中,一些功能和类 (str
, len
, Exception
, etc.) 是全局(即内建的)的,而其它的需要用 import
语句导入来使用:
import os
from os.path import basename,dirname
这些包应该在文件系统的其它地方,这样可以让 import 找到。Python 怎么定位这些文件的呢?其实在安装Python 虚拟机的时候这些位置已经设定好了,这些设定会根据系统的平台不同而不一样。
这些包位置可以通过 sys.path 来查看:
import sys
print sys.path
它会列出Python默认搜索包的目录,从第一个开始搜索,直到找到包为止,这也意味着如果两个目录含有同一个包名的包,Python会优先选择第一个搜索到的包。
所以,如果你要篡改Python 优先选择的包,可以使用
sys.path.insert(0,'/path/to/my/packages')
它适用于多种场景,但要记住它也很容易被滥用。所以,不到万不得已,不用它。
site
模块控制着Python 搜索包的方法。它在 Python 虚拟机初始化的时候就被引用了。更多细节参考它的官方稳当 .
PYTHONPATH
PYTHONPATH 是用来设定包的搜索路径的环境变量,可以看作Python 的 PATH 变量。它也可以看作是 由 :
分割的Python模块路径列表(不像 sys.path 的列表),它的设定方式:
export PYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory
在一些环境中,你不想覆盖存在的 PYTHONPATH 值,追加或预加即可。
export PYTHONPATH=$PYTHONPATH:/path/to/some/directory # Append
export PYTHONPATH=/path/to/some/directory:$PYTHONPATH #Prepend
这个命令你只要放入 .bashrc 活着 .zshrc就好。
PYTHONPATH, sys.path.insert 相似,也很容易修改,但最好不要去改。因为你一旦本地改了,而可能没有去修改上线环境。🈶️其它的方式,本文稍后呈现。
现在你理解了 Python 怎么样查找已经安装的包,那么我们来回顾下我们的问题。包和模块有什么不同?包是一个模块或者是模块集,通常压缩在一个tar包中,这个tar包中包含有依赖关系;复制文件到标准的包路径指导;编译说明,比如在安装前要编译的代码。
第三方包
对于各种任务,你很可能需要安装第方包。
Linux 系统安装第三方包有三种方法。
- 使用包管理系统 ,如deb,rpm
- 各种社区开发工具,如pip,easy_install
- 从源码安装
三种方式,都是做同样一件事。安装依赖,编译代码(如果需要的话),复制包中的模块到标准的包搜索目录中。
对于第二和第三种方式是和操作系统平台无关的,可以到 StackOverflow 网站上搜索相关的基于你的平台的第三方包的安装方法。
哪里找第三方模块
安装特定发行版包管理系统
simplejson(Json 语法分析工具),如在 Ubuntu 上:
$ sudo apt-get install python-simplejson
安装 pip
easy_install 在失宠了,所以我们使用 pip 。
pip 是Python 包管理工具。pip 并没有随着Python虚拟机安装,需要额外安装。
pip 安装和使用略。。。。。。。。
源码安装
这里也略。。。。。。。。。。
开发环境
virtualenv
最流行的设置Python开发环境的方式。virtualenv 为Python设定独立的环境。
为什么需要设定独立的Python环境?
开发过程中遇到最多的问题就是依赖和版本的问题,间接的和权限相关。 假设你的应用需要LibFoo第一个版本,但是另外一个应用需要第二个版本。你怎么使用这两个应用?如果都安装在 /usr/lib/python2.7/site-packages(或其它平台对应的目录) 目录中,很容易导致你无意升级了的一个不应该升级的应用。
简单的说,每个项目由不同/独立的Python环境。为每一个项目安装它需要的包到它独立的环境。
安装pip
sudo pip install virtualenv
安装完pip,为项目创建独立的Python环境
$ mkdir my_project_venv
$ virtualenv --distribute my_project_venv
。。。。也不写了,参考我以前整理的文章吧。。。。 LINK
其它重要的工具
编辑器
Vim
IDE like Sublime text
Pyflakes
包检查工具
Requests : HTTP 类库
Flask: web开发框架
Django:web开发的全栈框架
SciPy:科学计算工具
PEP 8 : Python风格指南
REF(Original):http://mirnazim.org/writings/python-ecosystem-introduction/