我爱编程

Python 生态[部分翻译]

2016-04-20  本文已影响83人  _willing

Python 生态

适合于从 PHP,Ruby 其它语言转过来的web开发者,用于了解的Python生态环境

更多参考 http://ikraftsoft.com/

读者对象

不是关于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 系统安装第三方包有三种方法。

三种方式,都是做同样一件事。安装依赖,编译代码(如果需要的话),复制包中的模块到标准的包搜索目录中。

对于第二和第三种方式是和操作系统平台无关的,可以到 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/

上一篇下一篇

猜你喜欢

热点阅读