乐观 发表于 2015-1-14 20:47:22

Linux教程之Python开辟生态情况简介

欢迎大家来到仓酷云论坛!Python开辟生态情况简介

作者:MirNazim原文:PythonEcosystem-AnIntroduction译者:dccrazyboy当开辟人员从PHP,Ruby或许其余开辟情况转换到Python时,所面临的最年夜成绩是缺少对Python开辟的生态情况的充足懂得。开辟人员异常想获得一份关于完成年夜多半义务的指南或资本,而岂论应用的办法能否标准。
下文所讲到的根本上都起源于我的网站,那存储着Python情况下关于收集运用开辟的一些根本材料,这些材料是为那些从其余平台转到Python开辟的练习生,研讨生和有经历的开辟者预备的。
这不是一个完善的文档,我的目的是将它做成一个永远的文档,希望这篇文档可以成长成为一个具体的教程。
目的读者

这不是一本关于Python的语法书。这个教程不会教你花梢的Python用法让你成为一位Python黑客。我默许你曾经懂得Python的基本用法。假如你不晓得,别往下看了。先去看看ZedShaw的收费教Python入门的书《LearnPythonTheHardWay》。
我不晓得你是否是在用Linux(最好是Ubuntu/Debian)或许是类Linux体系。为毛?由于Linux是我最懂得的体系。除测试跨阅读器兼容性之外,我从没在Windows或许MaxOSX下面开辟过。上面是若何在分歧平台装置Python的教程。


[*]Python101:SettingupPythononWindows
[*]OfficialdocumentationforPythononWindows
[*]OfficialdocumentationforPythononMacOSX
去搜刮下最合适你平台的Python装置办法。我激烈树立问StackOverflow。

版本之惑

Python2.x是一个稳固的版本,Python3是个新的版本。假如你不在意,跳过这段直接看上面的Python装置部门。
当开端进修Python时,安个3.x的版本看上去应当是第一步,但它能够其实不必定是你想要的。
如今Python有两个正在开辟的版本-2.7.x和3.x(也被成为Python3,Py3k或Python3000)。跟Python2比拟Python3就是别的一个说话。它们之间存在者或年夜或小的语法差别。当今Python2.6/2.7是被装置和运用的最为普遍的版本。很多的主流代码和一些主要的packages/frameworks/tools/utilities/modules其实不支撑Python3。
是以,最平安的选择是应用2.x(2.7最好)版本。假如你完整懂得Python3的话在再用它。
Python3WallofShame列出了许多包在Python3中的兼容性。在决议用Python3之前好悦目看这个。

VM遴选

Python说明器或Python虚拟机有许多种完成,CPython是最主流的完成。CPython同时也是其余虚拟机完成的参考说明器。
PyPy是用Python完成的Python说明器,Jython是用Java完成运转在JVM上的说明器,IronPython是用Microsoft.NETCLR完成的说明器。
除非说明器的选择异常异常主要,我们普通都用CPython。
假如下面那些关于版本和虚拟机的空话让你头疼,那你就装置CPython的2.7.x版本,信任我!

装置Python

年夜多半的Linux/Unix体系的MaxOSX都自带Python。假如没有或许版本太低,你可以经由过程上面的敕令装置:
Ubuntu/Debian及其衍生体系:
$sudoapt-getinstallpython2.7sudo是一个是类Unix体系的一个敕令,它许可用户以其余用户(通常为超等用户,或许root)的权限运转法式。更多请查阅Wikipedia。
Fedora/RedHat及相似体系:
sudoyuminstallpython2.7应用RHEL你能够须要翻开EPELRepositories能力装置。
从这起,我将在例子中应用sudo,你须要依据你的体系停止更改。


懂得包

你起首须要懂得的是Python没有一个默许的担保理举措措施。现实上,包的概念在Python中是相当弱的。
能够你曾经晓得,Python代码被组织为模块。一个模块能够由包括一个函数的单一文件构成,也能够由包括多个模块的目次构成。包和模块的差别异常小,而且每一个模块都能被懂得为包。
那末包和模块的差别究竟是甚么(假如有的话)?为了明确这个,你起首应当明确Python是若何查找模块的。
好像其余编程情况一样,Python中的一些函数和类(例如str,len,Exception等)在全局(叫做内置函数)都是可用的。其余就须要经由过程手动import出去。例如:
>>>importos>>>fromos.pathimportbasename,dirname这个包必定存在你的机子上,如许能力被import语句导入。但Python是若何晓得这些模块的地位呢?这些地位信息在你装置Python虚拟机时就被主动设置好了,而且依附于你的目的平台。
包的路径可以在sys.path中查询。上面是在我的笔记本上的成果,运转情况是Ubuntu11.10。
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]这里给出了Python搜刮包的路径。它将从最下面开端找,直到找到一个名字符合的。这注解假如两个分歧的路径分离包括了两个具有雷同名字的包,搜刮将在找到第一个名字的时刻停滞,然后将永久不会往下查找。
正如你所猜的,包搜刮路径很轻易被劫持,为了确保Python起首载入你的包,所需做的以下:
>>>sys.path.insert(0,/path/to/my/packages)虽然这个办法在许多情形下都很好用,但必定要当心不要滥用。只要当需要时再应用!不要滥用!
site模块掌握包的搜刮路径。当Python虚拟机初始化时它会子同被导入。假如你想懂得更多信息,请看官方文档。

PYTHONPATH变量

PYTHONPATH是一个用来增长默许包搜刮目次的情况变量。可以以为它是关于Python的一个特别的PATH变量。它仅仅是一个经由过程:朋分,包括Python模块目次的列表(并非相似于sys.path的Pythonlist)。它能够就相似上面如许:


exportPYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory

有时刻你能够其实不想笼罩失落现存的PYTHONPATH,而仅仅是愿望添加新目次到头部或尾部。
exportPYTHONPATH=$PYTHONPATH:/path/to/some/directory#AppendexportPYTHONPATH=/path/to/some/directory:$PYTHONPATH#PrependPYTHONPATH,sys.path.insert这些办法并不是完善,我们最好也不要用这些办法。应用它们,你能够可以处理当地的开辟情况成绩,但它在其余情况下或许其实不实用。有许多种办法可以到达这个后果,鄙人面我将逐个论述。
我们如今明确的Python若何找到装置的包路径,如今让我们回到开端谁人成绩。模块和包的差别究竟是甚么?包是一个模块或模块/子模块的聚集,普通情形下被紧缩到一个紧缩包中。个中包括1)依附信息2)将文件拷贝到尺度的包搜刮路径的指令。3)编译指令(假如在装置前代码必需被编译的话)。就这些器械!




第三方包

从一开端,假如要做一些现实Python开辟,你必定会用到一些第三方包。
在Linux体系上至多有3种装置第三方包的办法。

[*]应用体系自带的担保理体系(deb,rpm,等)
[*]经由过程社区开辟的各类对象,例如pip,easy_install等
[*]从源文件装置
这三个方面,简直完成异样的工作。即:装置依附,编译代码(假如须要的话),将一个包括模块的包复制的尺度软件包搜刮地位。
第二步和第三步在一切的操作体系上根本雷同。我再次愿望您可以在StackOverflow上找到你的平台的第三方包装置办法。
在哪找第三方包?

在装置第三方包之前,你起首要找到他们。以下是几种办法:

[*]你的体系担保理器中的刊行版公用包。
[*]PythonPackageIndex(orPyPI)
[*]大批的源代码办事器,例如Launchpad,GitHub,BitBucket等

经由过程刊行版公用包装置

经由过程担保理器装置包装置包就像应用敕令行或许GUI装置其余软件那样简略。例如在Ubuntu中装置simplejson
$sudoapt-getinstallpython-simplejson
经由过程pip装置

easy_install逐渐不再风行。我们将重要引见pip,它是easy_install的一个替换品。
pip是一个用来装置和治理Python包的对象,就好像PythonPacketIndex一样。pip并没有跟着Python一路装置,是以我们须要先装置它。Linux下,普通如许装置:
$sudoapt-getinstallpython-pip在装置任何其他包之前,我老是经由过程PyPI将pip进级到最新版本的,Ubuntu软件库中的版本广泛落伍的PyPI。我经由过程pip进级pip它本身。
$sudopipinstallpip--upgrade如今假如须要装置任何包,你可以运转pipinstallpackage-name敕令。所以可以经由过程上面敕令装置simplejson:
sudoyuminstallpython2.70删除包也很简略。
sudoyuminstallpython2.71普通情形下,pip会从PyPI主动装置最新的稳固版,但有时我们须要装置一个特定版本的包,由于你的项目能够基于特别的版本。是以你能够须要应用相似以下的pipinstall敕令:
sudoyuminstallpython2.72我们能够须要进级/升级/从新装置包。此时可以经由过程上面的敕令完成:
sudoyuminstallpython2.73
如今,假如你想装置一个处于开辟版本的包,它在版本掌握仓库有,然则PyPI中还没有怎样办?pip可以或许很好的处置这类情形,但在这之前,你须要本身装置这个版本掌握仓库。Ubuntu下,你可以以下装置:
sudoyuminstallpython2.74装置版本掌握仓库以后,从版本掌握仓库装置包就以下所示:
sudoyuminstallpython2.75你也能够异样简略的从当地仓库装置,留意上面的三斜杠是文件目次。
sudoyuminstallpython2.76有一点须要留意,假如应用git协定装置,你须要应用git+git前缀:
sudoyuminstallpython2.77如今你能够会猎奇这些egg会被怎样应用。如今你须要明确的是一个egg是一个被紧缩的Python包,外面包括了源代码和一些元数据。pip在装置包前树立了egg信息。你可以在代码仓库的setup.py文件中找到egg名字。找到setup块然后找到相似于name="something"的字段。它能够看起来就像以下的代码(这段代码从simplejson的srtup.py获得)一样。
sudoyuminstallpython2.78假如没有setup.py文件咋办?如许若何找到egg名?其实我们不须要。把包源码拷贝到你的工程目次下,然后导入出来就能够直接用了。

--user选项

下面的一切例子把包都装置到体系规模。假如你在pipinstall时应用--user选项,包将被装置到~/.local目次下。在我的机子上,以下所示:
sudoyuminstallpython2.79留意:markdown2被装置到/home/mir/.local/bin/markdown2这个目次下。
有许多缘由使你不想将包装置到体系目次中。稍后我将讲授若何关于每一个项目设置自力的Python情况。

从源码装置

从源码装置包仅仅须要一个敕令,解压这个包到一个目次,然后履行上面的敕令。
>>>importos>>>fromos.pathimportbasename,dirname0虽然这些装置的方法并没有甚么分歧,但pip方法是最好的。pip让你具有轻松进级/升级包的才能,而手动装置你就不能不去手动下载,解压的装置。手动装置包应当使你最初一个选择,假如其余全体掉败了(普通不太能够)。

装置须要编译的包

我们如今曾经懂得了年夜多半包的装置办法,但有些包还没有引见:包括C/C++代码的Python包,它们须要在装置前被编译。关于这些包最好的例子是数据库适配器,图片处置库等。
固然pip可以处置编译装置的源码,但我小我更爱好应用刊行版的担保理器供给的包。它将会装置编译好的二进制文件。
假如你照样想用pip装置,上面是在Ubuntu体系上须要做的。
编译器的相干对象:
>>>importos>>>fromos.pathimportbasename,dirname1Python开辟情况(头文件等):
>>>importos>>>fromos.pathimportbasename,dirname2假如你的体系没有python-dev-all,看看这些类似的名字python-dev,python2.X-dev等等。
确保你曾经装置了psycopg2(PostgreSQLRDBMSadapterforPython),你将须要PostgreSQL的开辟文件。
>>>importos>>>fromos.pathimportbasename,dirname3完成这些依附的装置后,你就可以运转pipinstall了。
>>>importos>>>fromos.pathimportbasename,dirname4还须要留意一点:并非一切的包都能经由过程pip编译装置!。但假如你对编译装置很有自负,或许曾经关于若何在本身的目的平台装置有足够的经历。那就勇敢的手动装置吧!


Python开辟情况

分歧的人爱好用分歧的方法树立各自的开辟情况,但在简直一切的编程社区,总有一个(或一个以上)开辟情况让人更轻易接收。应用分歧的开辟情况固然没有甚么毛病,但有些情况设置更轻易停止方便的测试,并做一些反复/模板化的义务,使得在天天的平常任务简略并易于保护。
virtualenv

在Python的开辟情况的最经常使用的办法是应用virtualenv包。Virtualenv是一个用来创立自力的Python情况的包。如今,涌现了如许的成绩:为何我们须要一个自力的Python情况?要答复这个成绩,请许可我援用virtualenv本身的文档:
我们须要处置的根本成绩是包的依附、版本和直接权限成绩。想象一下,你有两个运用,一个运用须要libfoo的版本1,而另外一运用须要版本2。若何能力同时应用这些运用法式?假如您装置到的/usr/lib/python2.7/site-packages(或任何平台的尺度地位)的一切,在这类情形下,您能够会不当心进级不该该进级的运用法式。简略地说,你可认为每一个项目树立分歧的/自力的Python情况,你将为每一个项目装置一切须要的软件包到它们各自自力的情况中。
应用pip敕令来装置virtualenv:
>>>importos>>>fromos.pathimportbasename,dirname5virtualenv装置终了后,可以经由过程运转上面的敕令来为你的项目创立自力的python情况。
>>>importos>>>fromos.pathimportbasename,dirname6下面产生了甚么?你创立了文件夹my_project_venv来存储你的新的自力Python情况。--distribute选项使virtualenv应用新的基于刊行版的担保理体系而不是setuptools取得的包。你如今须要晓得的就是--distribute选项会主动在新的虚拟情况中装置pip,如许就不须要手动装置了。当你成为一个更有经历的Python开辟者,你就会明确个中细节。
如今看看my_project_venv目次,你会看到如许的构造:
>>>importos>>>fromos.pathimportbasename,dirname7经由过程上面的敕令激活这个virtualenv:
>>>importos>>>fromos.pathimportbasename,dirname8履行终了后,提醒多是这个模样的:
>>>importos>>>fromos.pathimportbasename,dirname9经由过程deactivate敕令分开virtualenv情况
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]0运转上面的敕令可以更好地舆解二者的差别,假如曾经进入virtualenv请先分开。
起首让我们看看假如挪用python/pip敕令它会挪用那一个。
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]1再来一次!此次翻开virtualenv,然后看看有甚么分歧。我的机子上显示以下:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]2virtualenv拷贝了Python可履行文件的正本,并创立一些有效的剧本和装置了项目须要的软件包,你可以在项目标全部性命周期中装置/进级/删除这些包。它也修正了一些搜刮路径,例如PYTHONPATH,以确保:

[*]当装置包时,它们被装置在以后运动的virtualenv里,而不是体系规模内的Python路径
[*]当import代码时,virtualenv将优先采用本情况中装置的包,而不是体系Python目次中装置的包。
还有一点比拟主要,在默许情形下,一切装置在体系规模内的包关于virtualenv是可见的。这意味着假如你将simplejson装置在您的体系Python目次中,它会主动供给给一切的virtualenvs应用。这类行动可以被更改,在创立virtualenv时增长--no-site-packages选项的virtualenv就不会读取体系包,以下:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]3
virtualenvwrapper

virtualenvwrapper是一个树立在virtualenv上的对象,经由过程它可以便利的创立/激活/治理/烧毁虚拟情况,没它的话停止下面的操作将会相当费事。可以经由过程上面敕令装置virtualenvwrapper。
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]4装置后,你须要设置装备摆设它。上面是我的设置装备摆设:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]5设置WORKON_HOME和source/usr/local/bin/virtualenvwrapper.sh只须要几行代码,其余部门是依照我小我爱好添加的。
将下面的设置装备摆设添加到~/.bashrc的末尾,然后将上面的敕令运转一次:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]6假如你封闭一切的shell窗口和标签,然后再翻开一个新的shell窗口或标签时,~/.bashrc也会被履行,此时将会主动的更新你的virtualenvwrapper设置装备摆设。后果就跟履行下面的敕令一样。
新建/激活/封闭/删除虚拟空间须要履行上面的敕令:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]7Tab补全在virtualenvwrapper中是可用的哦~
前去virtualenvwrapper主页查找更多关于它的信息。

经由过程pip和virtualenv停止依附治理

pip联合virtualenv可认为你的项目供给根本的依附治理。
你可以经由过程pipfreeze敕令来检查以后已装置的包版本。上面列出的是我写着个博客所用到的包的版本:
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]8留意-l选项,它告知pip只导出以后运动虚拟空间中装置的包,消除那些全局空间装置的包。
你可以把成果保留到文件里,然后将它添加到你的版本掌握体系里。
>>>importsys>>>printsys.path[,/usr/lib/python2.7,/usr/lib/python2.7/plat-linux2,/usr/lib/python2.7/lib-tk,/usr/lib/python2.7/lib-old,/usr/lib/python2.7/lib-dynload,/usr/local/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages,/usr/lib/python2.7/dist-packages/PIL,/usr/lib/python2.7/dist-packages/gst-0.10,/usr/lib/python2.7/dist-packages/gtk-2.0,/usr/lib/pymodules/python2.7,/usr/lib/python2.7/dist-packages/ubuntu-sso-client,/usr/lib/python2.7/dist-packages/ubuntuone-client,/usr/lib/python2.7/dist-packages/ubuntuone-control-panel,/usr/lib/python2.7/dist-packages/ubuntuone-couch,/usr/lib/python2.7/dist-packages/ubuntuone-installer,/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol]9同时pip也能从一个包括pipfreeze敕令的文件中装置包。
>>>sys.path.insert(0,/path/to/my/packages)0

其他主要对象

固然我们评论辩论了根本的Python版本,虚拟机和担保理,但在平常任务中我们依然还须要一些公用的对象来完成义务。虽然我不克不及把每个对象的细节都讲到,但是我照样尽可能给你供给根本的概述。
编纂器

关于Python编程有大批很优良的编译器。关于我小我而言,我更偏向于Vim,但这里我其实不想挑起一场编纂器战斗。
有大批支撑Python的编纂器,例如:Vim/Gvim,Emacs,GNOME上的GEdit,KDE上的Kate,Scribes,ActiveState的KomodoEdit/IDE,WingWare的WingIDE,JetBrains上PyCharm,Eclipse的PyDEV插件。另外,还有其他,但这些仿佛是最风行的。你可以随意率性选择最合适你的。

Pyflakes:源码检测对象

Pyflakes是一个检讨Python源码并经由过程文天职析找失足误的对象。它可以检测出语法毛病,和(部门)逻辑毛病,导入但未应用的模块,只应用一次的变量,等等。
你可以经由过程pip装置:
>>>sys.path.insert(0,/path/to/my/packages)1在敕令行挪用它,参数填源文件名便可,以下所示:
>>>sys.path.insert(0,/path/to/my/packages)2Pyflakes也可已被集成进编纂器。这是它在我的vim中的模样。留意红海浪线:

请自行前去StackOverflow找出若何将Pyflakes添加到编纂器。
Pyflakes官网

Requests:一个HTTP库

Requests是一个将处置HTTP要求变得易如反掌的库。
异样是经由过程pip装置它:
>>>sys.path.insert(0,/path/to/my/packages)3上面是一个例子:
>>>sys.path.insert(0,/path/to/my/packages)4Requests文档

Flask:一个web开辟的微框架

Flask是一个基于Werkzeug和Jinja2的微框架。
经由过程pip装置:
>>>sys.path.insert(0,/path/to/my/packages)5这是一个简略的例子:
>>>sys.path.insert(0,/path/to/my/packages)6可以如许运转它:
>>>sys.path.insert(0,/path/to/my/packages)7Flask官网

Django:一个全栈式web开辟框架

Django是一个全栈式web开辟框架。它供给了ORM,HTTP库,表单处置,XSS过滤,模板和其余特征。
经由过程pip装置:
>>>sys.path.insert(0,/path/to/my/packages)8去Django官网查找更多信息。

Fabric:简化SSH的应用并安排体系治理员义务

Fabric是一个敕令行对象用来简化法式关于SSH的应用或运转体系治理员义务。它供给了一个根本套件可以履行当地或长途shell敕令(正常或经由过程sudo),上传/下载文件,和其他帮助功效,如提醒用户输出,或中断履行的操作。
可以经由过程pip装置:
>>>sys.path.insert(0,/path/to/my/packages)9这是一个经由过程Fabric写的义务:
exportPYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory0你可以在一台或多台办事器上履行这个敕令:
exportPYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory1Fabric官网

SciPy:一个迷信盘算库

假如你的任务触及迷信和数值盘算,SciPy的是您弗成或缺的主要对象。
SciPy官网如许引见:
SciPy的(读做“SighPie”)是数学、迷信和工程方面的开源库。这也是Python在数值盘算方面异常优良的一个库。SciPy的库依附于NumPy,它供给了便利疾速的N维矩阵操作。SciPy库与NumPy中的矩阵兼容,并供给了很多用户友爱且高效力的数值法式,如数值的积分和优化。同时,他们运转在一切风行的操作体系上,装置疾速,而且都是收费的。NumPy和SciPy易于应用,但功效壮大,足以知足一些世界抢先的迷信家和工程师。假如您须要在电脑上处置数字、显示或颁布成果,尝尝SciPy吧!SciPy

PEP8:Python作风指南

固然它自己不是一个软件对象,但它倒是Python一个主要的资本。
PEP8是一个描写Python刊行版中根本库的编码商定的文档。这份文档的愿望可以或许商定全球Python开辟者的代码结构,变量、类、函数的定名规矩。请确保你懂得它,并遵守它。他将在将来的Python应用中带来相当多的好处。
PEP0008

壮大的Python尺度库

Python的尺度库涵盖异常普遍,供给各类各样的功效。该库包括的内置模块(应用C编写的)供给了拜访体系的功效,如文件I/O,而且存在大批Python编写的模块,他们供给尺度化的处理计划去处理平常的编程中涌现的很多成绩。这些模块都明白地抽离平台的细节,供给平台有关的API,旨在增强Python法式的跨平台可移植性。


推举浏览

DavidGoodger的CodeLikeaPythonista:IdiomaticPython包括了许多适用的Python例子和技巧。
DougHellmann的PythonModuleoftheWeek系列的重点是扶植一个应用Python尺度库中的模块的示例代码的仓库。

赠言

这个教程到今朝为止,所讲述的仅是点到为止。Python世界中有大批的对象,库和软件可以帮你完成你的任务。但你须要本身花时光去发明他们!
Python有一个巨大的社区和一群很聪慧的保护者,他们关于老手异常有耐烦。是以,存眷你最爱好的开源项目,参加他们的邮件列表,跟有经历的开辟者交换经历。不久的未来,你的经历也将足够丰硕,你将会成为他们个中的一员。
最初我想援用下ZenOfPython。我们思虑,进修,遭到启示!HappyPythoning
exportPYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory2

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!

只想知道 发表于 2015-1-16 23:01:46

Linux教程之Python开辟生态情况简介

了解Linux的网络安全,系统的安全,用户的安全等。安全对于每位用户,管理员来说是非常重要的。

金色的骷髅 发表于 2015-1-25 17:07:32

对我们学习操作系统有很大的帮助,加深我们对OS的理解。?

admin 发表于 2015-2-3 12:31:26

下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。

飘灵儿 发表于 2015-2-9 02:24:52

可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?

灵魂腐蚀 发表于 2015-2-26 19:24:33

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。

兰色精灵 发表于 2015-3-8 17:27:32

即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。

小女巫 发表于 2015-3-16 11:43:03

众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。

爱飞 发表于 2015-3-22 23:11:02

Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。
页: [1]
查看完整版本: Linux教程之Python开辟生态情况简介