中企动力 > 头条 > python在那个平台

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python在那个平台

Python资源大全,让你相见恨晚的Python库! 流量视频课程

img

Edda

关注

环境管理

管理 Python 版本和环境的工具

p – 非常简单的交互式 python 版本管理工具。pyenv – 简单的 Python 版本管理工具。Vex – 可以在虚拟环境中执行命令。virtualenv – 创建独立 Python 环境的工具。virtualenvwrapper– virtualenv 的一组扩展。

包管理

管理包和依赖的工具。

pip – Python 包和依赖关系管理工具。pip-tools – 保证 Python 包依赖关系更新的一组工具。conda – 跨平台,Python 二进制包管理工具。Curdling – 管理 Python 包的命令行工具。wheel – Python 分发的新标准,意在取代 eggs。

包仓库

本地 PyPI 仓库服务和代理。

warehouse – 下一代 PyPI。Warehouse bandersnatch – PyPA 提供的 PyPI 镜像工具。devpi – PyPI 服务和打包/测试/分发工具。localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。

分发

打包为可执行文件以便分发。

PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。py2app – 将 Python 脚本变为独立软件包(Mac OS X)。py2exe – 将 Python 脚本变为独立软件包(Windows)。pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。

构建工具

将源码编译成软件。

buildout – 一个构建系统,从多个组件来创建,组装和部署应用。BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。fabricate – 对任何语言自动找到依赖关系的构建工具。PlatformIO – 多平台命令行构建工具。PyBuilder – 纯 Python 实现的持续化构建工具。SCons – 软件构建工具。

交互式解析器

交互式 Python 解析器。

IPython – 功能丰富的工具,非常有效的使用交互式 Python。bpython– 界面丰富的 Python 解析器。ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。

文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

imghdr – (Python 标准库)检测图片类型。mimetypes – (Python 标准库)将文件名映射为 MIME 类型。path.py – 对 os.path 进行封装的模块。pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径操作库。python-magic– 文件类型检测的第三方库 libmagic 的 Python 接口。Unipath– 用面向对象的方式操作文件和目录watchdog – 管理文件系统事件的 API 和 shell 工具

日期和时间

操作日期和时间的类库。

arrow– 更好的 Python 日期时间操作类库。Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。dateutil – Python datetime 模块的扩展。delorean– 解决 Python 中有关日期处理的棘手问题的库。moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。PyTime – 一个简单易用的Python模块,用于通过字符串来操作日期/时间。pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间操作。

文本处理

用于解析和操作文本的库。

通用chardet – 字符编码检测器,兼容 Python2 和 Python3。difflib – (Python 标准库)帮助我们进行差异化比较。ftfy – 让Unicode文本更完整更连贯。fuzzywuzzy – 模糊字符串匹配。Levenshtein – 快速计算编辑距离以及字符串的相似度。pangu.py – 在中日韩语字符和数字字母之间添加空格。pyfiglet -figlet 的 Python实现。shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。unidecode – Unicode 文本的 ASCII 转换形式 。uniout – 打印可读的字符,而不是转义的字符串。xpinyin – 一个用于把汉字转换为拼音的库。Slug化awesome-slugify – 一个 Python slug 化库,可以保持 Unicode。python-slugify – Python slug 化库,可以把 unicode 转化为 ASCII。unicode-slugify – 一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。解析器phonenumbers – 解析,格式化,储存,验证电话号码。PLY – lex 和 yacc 解析工具的 Python 实现。Pygments – 通用语法高亮工具。pyparsing – 生成通用解析器的框架。python-nameparser – 把一个人名分解为几个独立的部分。python-user-agents – 浏览器 user agent 解析器。sqlparse – 一个无验证的 SQL 解析器。

特殊文本格式处理

一些用来解析和操作特殊文本格式的库。

通用tablib – 一个用来处理中表格数据的模块。OfficeMarmir – 把输入的Python 数据结构转换为电子表单。openpyxl – 一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。python-docx – 读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。unoconv – 在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。XlsxWriter – 一个用于创建 Excel .xlsx 文件的 Python 模块。xlwings – 一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。xlwt / xlrd – 读写 Excel 文件的数据和格式信息。relatorio – 模板化OpenDocument 文件。PDFPDFMiner – 一个用于从PDF文档中抽取信息的工具。PyPDF2 – 一个可以分割,合并和转换 PDF 页面的库。ReportLab – 快速创建富文本 PDF 文档。MarkdownMistune – 快速并且功能齐全的纯 Python 实现的 Markdown 解析器。Python-Markdown – John Gruber’s Markdown 的 Python 版实现。YAMLPyYAML – Python 版本的 YAML 解析器。CSVcsvkit – 用于转换和操作 CSV 的工具。Archiveunp – 一个用来方便解包归档文件的命令行工具。

自然语言处理

用来处理人类语言的库。

NLTK – 一个先进的平台,用以构建处理人类语言数据的 Python 程序。jieba – 中文分词工具。langid.py – 独立的语言识别系统。Pattern – Python 网络信息挖掘模块。SnowNLP – 一个用来处理中文文本的库。TextBlob – 为进行普通自然语言处理任务提供一致的 API。TextGrocery – 一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。

文档

用以生成项目文档的库。

Sphinx – Python 文档生成器。awesome-sphinxdocMkDocs – 对 Markdown 友好的文档生成器。pdoc – 一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。Pycco – 文学编程(literate-programming)风格的文档生成器。

配置

用来保存和解析配置的库。

config – logging 模块作者写的分级配置模块。ConfigObj – INI 文件解析器,带验证功能。ConfigParser – (Python 标准库) INI 文件解析器。profig – 通过多种格式进行配置,具有数值转换功能。python-decouple – 将设置和代码完全隔离。

命令行工具

用于创建命令行程序的库。

命令行程序开发cement – Python 的命令行程序框架。click – 一个通过组合的方式来创建精美命令行界面的包。cliff – 一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。clint – Python 命令行程序工具。colorama – 跨平台彩色终端文本。docopt – Python 风格的命令行参数解析器。Gooey – 一条命令,将命令行程序变成一个 GUI 程序。python-prompt-toolkit – 一个用于构建强大的交互式命令行程序的库。生产力工具aws-cli – Amazon Web Services 的通用命令行界面。bashplotlib – 在终端中进行基本绘图。caniusepython3 – 判断是哪个项目妨碍你你移植到 Python 3。cookiecutter – 从 cookiecutters(项目模板)创建项目的一个命令行工具。doitlive – 一个用来在终端中进行现场演示的工具。howdoi – 通过命令行获取即时的编程问题解答。httpie – 一个命令行HTTP 客户端,cURL 的替代品,易用性更好。PathPicker – 从bash输出中选出文件。percol – 向UNIX shell 传统管道概念中加入交互式选择功能。SAWS – 一个加强版的 AWS 命令行。thefuck – 修正你之前的命令行指令。mycli – 一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。pgcli – Postgres 命令行工具,具有自动补全和语法高亮功能。

下载器

用来进行下载的库.

s3cmd – 一个用来管理Amazon S3 和 CloudFront 的命令行工具。s4cmd – 超级 S3 命令行工具,性能更加强劲。you-get – 一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。youtube-dl – 一个小巧的命令行程序,用来下载 YouTube 视频。

图像处理

用来操作图像的库.

pillow – Pillow 是一个更加易用版的 PIL。hmap – 图像直方图映射。imgSeek – 一个使用视觉相似性搜索一组图片集合的项目。nude.py – 裸体检测。pyBarcode – 不借助 PIL 库在 Python 程序中生成条形码。pygram – 类似 Instagram 的图像滤镜。python-qrcode – 一个纯 Python 实现的二维码生成器。Quads – 基于四叉树的计算机艺术。scikit-image – 一个用于(科学)图像处理的 Python 库。thumbor – 一个小型图像服务,具有剪裁,尺寸重设和翻转功能。wand – MagickWand的Python 绑定。MagickWand 是 ImageMagick的 C API 。

OCR

光学字符识别库。

pyocr – Tesseract 和 Cuneiform 的一个封装(wrapper)。pytesseract – Google Tesseract OCR 的另一个封装(wrapper)。python-tesseract – Google Tesseract OCR 的一个包装类。

音频

用来操作音频的库

audiolazy -Python 的数字信号处理包。audioread – 交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。beets – 一个音乐库管理工具及 MusicBrainz 标签添加工具dejavu – 音频指纹提取和识别django-elastic-transcoder – Django + Amazon Elastic Transcoder。eyeD3 – 一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。id3reader – 一个用来读取 MP3 元数据的 Python 模块。m3u8 – 一个用来解析 m3u8 文件的模块。mutagen – 一个用来处理音频元数据的 Python 模块。pydub – 通过简单、简洁的高层接口来操作音频文件。pyechonest – Echo Nest API 的 Python 客户端talkbox – 一个用来处理演讲/信号的 Python 库TimeSide – 开源 web 音频处理框架。tinytag – 一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。mingus – 一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。

Video

用来操作视频和GIF的库。

moviepy – 一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。scikit-video – SciPy 视频处理常用程序。

地理位置

地理编码地址以及用来处理经纬度的库。

GeoDjango – 世界级地理图形 web 框架。GeoIP – MaxMind GeoIP Legacy 数据库的 Python API。geojson – GeoJSON 的 Python 绑定及工具。geopy – Python 地址编码工具箱。pygeoip – 纯 Python GeoIP API。django-countries – 一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。

HTTP

使用HTTP的库。

requests – 人性化的HTTP请求库。grequests – requests 库 + gevent ,用于异步 HTTP 请求.httplib2 – 全面的 HTTP 客户端库。treq – 类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。urllib3 – 一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。

数据库

Python实现的数据库。

pickleDB – 一个简单,轻量级键值储存数据库。PipelineDB – 流式 SQL 数据库。TinyDB – 一个微型的,面向文档型数据库。ZODB – 一个 Python 原生对象数据库。一个键值和对象图数据库。

数据库驱动

用来连接和操作数据库的库。

MySQL – awesome-mysql系列mysql-python – Python 的 MySQL 数据库连接器。mysqlclient – mysql-python 分支,支持 Python 3。oursql – 一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.PyMySQL – 纯 Python MySQL 驱动,兼容 mysql-python。PostgreSQLpsycopg2 – Python 中最流行的 PostgreSQL 适配器。queries – psycopg2 库的封装,用来和 PostgreSQL 进行交互。txpostgres – 基于 Twisted 的异步 PostgreSQL 驱动。其他关系型数据库apsw – 另一个 Python SQLite封装。dataset – 在数据库中存储Python字典 – 可以协同SQLite,MySQL,和 PostgreSQL工作。pymssql– 一个简单的Microsoft SQL Server数据库接口。NoSQL 数据库cassandra-python-driver – Cassandra 的 Python 驱动。HappyBase – 一个为 Apache HBase 设计的,对开发者友好的库。Plyvel – 一个快速且功能丰富的 LevelDB 的 Python 接口。py2neo – Neo4j restful 接口的Python 封装客户端。pycassa – Cassandra 的 Python Thrift 驱动。PyMongo – MongoDB 的官方 Python 客户端。redis-py – Redis 的 Python 客户端。telephus – 基于 Twisted 的 Cassandra 客户端。txRedis – 基于 Twisted 的 Redis 客户端。

ORM

实现对象关系映射或数据映射技术的库。

关系型数据库awesome-sqlalchemy系列Django Models – Django 的一部分。SQLAlchemy – Python SQL 工具以及对象关系映射工具。Peewee – 一个小巧,富有表达力的 ORM。PonyORM – 提供面向生成器的 SQL 接口的 ORM。python-sql – 编写 Python 风格的 SQL 查询。NoSQL 数据库django-mongodb-engine – Django MongoDB 后端。PynamoDB – Amazon DynamoDB 的一个 Python 风格接口。flywheel – Amazon DynamoDB 的对象映射工具。MongoEngine – 一个Python 对象文档映射工具,用于 MongoDB。hot-redis – 为 Redis 提供 Python 丰富的数据类型。redisco – 一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。其他butterdb – Google Drive 电子表格的 Python ORM。

Web 框架

全栈 web 框架。

Django – Python 界最流行的 web 框架。awesome-django系列Flask – 一个 Python 微型框架。awesome-flask系列Pyramid – 一个小巧,快速,接地气的开源Python web 框架。awesome-pyramid系列Bottle – 一个快速小巧,轻量级的 WSGI 微型 web 框架。CherryPy – 一个极简的 Python web 框架,...

C和Python,初学者应该如何选择 互联网视频课程

img

冷松

关注

对于C和Python两种语言,初学者应该选择从那个开始入门?笔者认为在做出选择之前首先要对这两种语言有一个初步的了解。首先来说,C语言是一门通用的编程语言。之所以称其通用,是因为它能够做很多低级、底层的处理;同时它也有良好的跨平台性,C语言可以按照一定的标准在多种计算机平台上进行编译,包括嵌入式编程。而Python是一门面向对象的编程语言,这是它和C存在的一大区别;另一个区别是Python是一种解释型语言。在人们写好这种语言之后还需要有解释器进行翻译才可以在计算机上运行。但Python虽然从运行效率上与C语言相比较低,但Python有丰富的库,而且这些库很多是用C和C++写的。这就使得Python与C有一定的相通性,而且和C语言相比,Python的专长在于数据统计分析和人工智能编程。

总结一点,C更基础,Python更实用。

如果今后的研究方向是嵌入式,那么C语言可以作为主攻方向。对于从事编程工作的朋友其实可以多了解几门语言,这样可以让自己的视野更加开阔。学Python主要是因为它能够快速而简洁地开发一些程序,易学易懂。但笔者认为如果想要在程序开发行业做得更久,有良好的C语言基础是不可缺少的。尚学堂陈老师指出,因为真正要做高性能编程, 不可能将机器的体系架构抛到脑后让Python虚拟机(或Java虚拟机等)帮你搞定所有底层。越来越多的CPU core,越来越恐怖的内存性能瓶颈,对于上层开发人员来说,无所谓,但是对高性能程序开发人员来说,这些是无法透明的。很多应用,还是自己掌控比较有效。这些场合中,汇编和C还是不可替代的。但是,光知道C是不够的,掌握一门面向对象语言,相对更高层的语言,不仅对以后的个人发展有利,也会对自己的技术认识产生帮助。

C的学习曲线更陡,貌似简单,其实难点也非常多,看上去较为简单的程序,也不是在短时间内可以掌握的。若要谈到底层优化,需要的功底是按年算的。但是一旦你C语言的基础打好了,对计算机的理解,对其他语言的理解都是大有帮助的。比如,如果你有C基础,可以说,在较短的时间内解除Python,就能写的出来一些不短的程序。后面的优化也算不上是难度太大的算法,都是非常基本的语句换来换去。在实际应用层面,Python比C方便的不是一个层次。

说起两者的不同可以在对象机制上加以比较:对于“动态确定变量类型”的理解,需要提到的是Python的Object对象机制。Objects即为“对象”是Python对于数据的抽象,用对象或者对象之间的关系可以表示Python中所有的数据,函数、字符串等等都可以是对象。关于对象有三种属性:实体,类型和值。实体一旦创建就不会被改变,一般而言,决定对象所支持的操作方式的类型(type,包括number,string,tuple及其他)也不会改变,但它的值可以改变。如果要找一个具体点的说明,实体就相当于对象在内存中的地址,是本质存在。而类型和值都只是实体的外在呈现。Python提供了一些接口与对象进行交互,比如id()函数用来获得对象实体的整形,type()函数获取其类型等等。

这种object机制,是C所不具备的,这也是Python的优势所在,c是一种静态类型语言,我们可以定义int a, char b等等,但必须是在源代码里面事先规定。比如我们可以在Python里面任意一处直接规定a = “lk”,这样,a的类型就是string,这是在其赋值的时候才决定的,我们无须在代码中明确写出。

C和Python,初学者应该如何选择?在以上内容中笔者举了一些简单的例子,尤其是关于Object对象机制是Python与C最大的不同之处,除此之外还有Python的库的强大与丰富,也使得用Python做一般的程序开发更加方便。

Python 中使用 Qt 玩玩客户端应用程序(跨平台)的开发 行业视频课程

img

凯斯

关注

最近 Qt 团队发了一篇文章( http://blog.qt.io/blog/2018/04/13/qt-for-python-is-coming-to-a-computer-near-you/ )表示要进行 PySide2 的开发,也就是为 Qt 提供 Python 语言的接口。当然,以前也有个项目 PySide ,但是只支持 Qt 4 。PySide2 支持 Qt 5 。至于语言层面,PySide2 支持 Python 2.7 以及 Python 3.4 到 Python 3.6 。

安装 Qt 库

根据你对应的平台下载相应的 wheel 文件

Win 平台以及 Linux 平台

macOS 平台

然后 pip install <下载的文件名>

比如我下载的是 macOS 下的,我执行的是

pip install PySide2-5.11.0a1-5.11.0-cp36-cp36m-macosx_10_11_intel.whl

Hello, World!

新建 Python 文件,内容如下

上面的代码创建了一个应用对象 app 以及在其上的标签对象 label 。当你执行 app.exec_() 时,PySide2 的事件轮询就开始了。因为我们没有指定 app 以及 label 的大小,所以当我们执行这段代码时,我们会看到应用程序的窗口刚好能包裹标签里的文字。

这个例子有点单调,下面我们做个稍微有点交互的。

添加事件处理

PySide2 的事件处理涉及到信号与插槽(Signals and Slots)的概念,这里不深入说明,有兴趣的可以参考文档 http://doc.qt.io/qt-5/signalsandslots.html 。

下面看个例子

上面的代码是在同一个文件中。这里为了看的效果好一点,我分开截的图。

这里我们通过 QLineEdit 和 QPushButton 分别创建了一个输入框和一个按钮,然后把这两个组件放在了 QVBoxLayout 容器组件中。当容器组件的大小和位置发生变化时,容器里面的组件的大小和位置也会发生变化。因此,我们使用了垂直方向的布局组件,刚好能让布局里面的组件能够叠起来。

最后,我们将按钮的点击事件与 greetings() 方法绑定,当按钮每次被点击时,对应的方法就会执行。这个例子中,当按钮被点击时,程序会读取输入框中的内容并在控制台上进行打印。运行界面类似这样

编写一个表单界面

我们最终编写的界面类似这样

代码如下

同样,上面的代码在同一个文件中。我们使用了多种布局去排列组件。最顶层我们使用的是 QVBoxLayout 组件,内层使用的是 QHBoxLayouts 组件。添加标签以及输入框相关代码比较类似,这里不做更多说明。

小结

本文没有涉及过多的技术原理,只是简单的介绍了下基础的用法,有兴趣的朋友可以去看看官方文档。此外,我更想说明的是,这次 Qt 团队重新拾起了 PySide 的开发,这个行动可能会激起其它开发者对 Python UI 框架的开发热情。不管怎么样,对 PySide 以及 Python 客户端应用的开发的发展我还是比较看好的。

Python不能用于大型项目?关于Python的10大误解 流量视频课程

img

天晴

关注

语言多元化是PayPal编程文化中一个重要的组成部分。在C++和Java长期流行的同时,更多的团队选择了Jva和Scala。同时,Braintree的收购也引入了一个久经世故的Ruby社区。Python作为一门特别的语言,在eBay和PayPal有很长的历史。而且其流行程度依然有增不减。

eBay的开发者支持Python这个应用于基层领域多年的语言。甚至在eBay管理层官方支持Python以前,技术人员就开始使用Python。我在几年前加入PayPal并选择Python来写内部应用,然而,我却发现了PayPal中将近15年以前的Python代码。

目前,Python 支撑着 超过50个项目, 包括:

功能和产品型, 例如 eBay Now 和 RedLaser运营和基础设施型**, 从开放的 OpenStack 到专有设施中间层服务和应用型**, 例如 PayPal 用来设定价格以及检测用户可用功能的那个(服务/应用)监测代理和接口*型*, 用于涉及到部署和安全的一些用例批处理任务*型*, 例如数据导入,价格调整,及其它项目以及不计其数的开发者工具

在接下来的文章里我将详细介绍那些使得 eBay 和 PayPal 的 Python 生态系统从2011年的不超过25个工程师到2014年超过260个工程师所使用的技术和举措。对于本文,我则会专注于10个不得不予以揭露的关于 eBay 和 PayPal 的企业环境的谬误。

谬误 #1: Python 是一门新语言

伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Java 4年. 目前比较有著名的很早就使用 Python 的例子是在1996年: Google 的第一个成功的网络爬虫。

如果你对于长长的 Python 历史比较好奇,Python 的作者 Guido van Rossum 已经为你准备好整个故事。

谬误 #2: Python 没有被编译

不像 C++ 一样需要一个独立的编译器工具链,Python 实际上被编译成了字节码,和 Java 或者许多其他的编译型语言十分相似。更进一步的编译过程,如果有的话, 取决于运行时环境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的进程式虚拟机(process virtual machine)。参考 谬误 #6 来了解更多。

一条在 PayPal 以及其它地方的通用原则就是,(应用的)安全性不能依赖于代码的已编译状态。更为重要的是加强运行时环境的安全,因为实质上每种语言都有一个解码器,或者能被拦截并导出受保护的状态。参考下一条谬误来了解更多的 Python 安全性问题。

谬误 #3: Python 不安全

轻量级 Python 的亲和力可能使他看起来不怎么可怕,但是这里直觉很大程度上是受到了误导的. 安全的一个核心原则就是尽可能让呈现的目标更小. 大系统是违背安全原则的,因为他们趋向于 使行为过渡集中化, 并且也 让开发者难于理解. Python 通过倡导简洁化来边缘化这些恶心的问题. 更有甚者, CPython 通过让自己成为一个简单、稳定并且易于审核的虚拟机来使这些问题得到解决. 事实上,近期 Coverity Software 的一个分析结果显示 CPython 得到了他们的最高质量评级。

Python 还拥有一系列可扩展的开源、产业标准化的安全库序列. 在PayPal, 我们把安全和授信看做是重中之重, 我们发现 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们自己的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求。

这些诸多的原因,使得 Python 成为PayPal(和eBay)的应用程序安全团队在某些业务中最快的选择. 这里有把Python用在PayPal的安全第一环境中的几个以安全为基础应用程序:

创建安全代理,以促进密钥的轮换以并巩固加密实现同业界领先的 HSM 技术集成为缺乏兼容性的技术栈构建受TLS保护的封装代理为我们内部的互相认证计划生成键和证书开发主动的漏洞扫描器

另外,还有无数存在安全隐患的用Python构建,面向操作的系统, 诸如防火墙和连接管理. 未来,我们一定回去深入的整合PayPal Python的安全事项.

谬误 #4: Python 是一门脚本语言

Python 确实可以用来编写脚本,并且因其简单的语法、跨平台并且无所不在于 Linux, Macs, 和其它Unix 机器而成为这个领域的领跑者之一。

事实上, Python 可能是常规用途编程语言中最灵活的技术. 以下是一些实例:

电信基础设施 (Twilio)支付系统 (PayPal, Balanced Payments)神经科学和心理学 (许多, 许多, 例子)数值分析和工程 (numpy, numba, 以及 更多其它)动画(LucasArts, Disney, Dreamworks)游戏后台 (Eve Online, Second Life, Battlefield, 以及 其它很多)Email 基础设施 (Mailman, Mailgun)媒体存储和处理 (YouTube, Instagram, Dropbox)操作和系统管理 (Rackspace, OpenStack)自然语言处理(NLTK)机器学习和计算机版本 (scikit-learn, Orange, SimpleCV)安全性和渗透性测试 (很多很多 以及 eBay/PayPal大数据 (Disco, Hadoop support)如理 (Calendar Server, 它 驱动了 Apple iCal)搜索系统 (ITA, Ultraseek, 还有 Google)Internet 基础设施 (DNS) (BIND 10)

更别提网站和web服务了,那些都不在少数. 事实上,PayPal工程师看起来像是有兴趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果对Python成功案例的更大清单感兴趣,那就看看官方的清单吧.

谬误 #5: Python 是弱类型的

Python 类型系统的特点是拥有强大、灵活的类型操作. 维基百科上对此作出的阐述.

而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色地带. 另一方面,现代的 Python 拥有一个统一的强类型系统, 其中什么都没有 的类型是明确指定的. 更进一步的,JVM自身也是动态类型的,因为可以把它的 根源 追溯到由Sun所收购的Smalltalk VM的一个实现。

Python的类型系统 很棒,但要提供给企业级使用,目前仍然还有许多更重大的事项需要关注。

谬误 #6: Python 速度慢

首先是有一个重要区别: Python 是一门编程语言,而不是运行时环境. Python 拥有几个实现:

CPython是参考实现, 且也是广泛发布和使用的实现.Jython是Python用于JVM的是一个成熟的实现.IronPython是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .PyPy是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.每一个运行时都有其自己的性能特点, 而且他们本身也不慢. 这里更重要的地方在于不能错误地把一个性能指标分派到一门编程语言智商. 应该总是把该评估用在一个应用程序运行时上面,最好是针对一个特定的使用场景。

清楚了那些事项之后,下面就是一些有Python提供的小项,体现其重要的性能优势:

把 NumPy 用作 Intel 的 MKL SIMD接口PyPy的 JIT 编译能 达到比C还快的性能Disqus 能在同样的100个盒子上容纳两亿五千万到5亿用户

诚然,这些都不是最新的列子,只是我个人的最爱罢了. 这将很容易扯到高性能Python以及独立提供的运行时这些广阔的领域. 我们不应只是专注于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的普遍影响上面, 特别是在一种企业级环境之下。

C++ vs Python,. 两种语言在同一个输出下的对比.

给定足够的时间,一个循规蹈矩的开发者只会按照下面这种经过论证的方式来编写精确高效的软件:

设计实现一个可以正确完成任务的软件,包括开发单独的测试测试性能,明确瓶颈优化,根据测试和Amdahl法则,并且利用Python与C的渊源

虽然这听起来很简单,但是即使是老道的工程师,这依旧是一个非常耗时的过程。Python设计之初就考虑到了这一套开发流程。根据我们的经验,通常C++和Java项目完成一次迭代流程的时间,够Python项目完成三次迭代流程。今天,PayPal和eBay中不乏有Python项目使用更少的代码战胜了同类C++和Java项目,这多亏了快速的开发使得仔

细的裁剪和优化变得可能。

Myth #7: Python无法做到大规模

大规模有许多定义,但无论怎样,YouTube是个大规模网站。每月UV超过十亿,每分钟上传的视频时长超过100小时,占用互联网带宽的20%,所有这一切都以Python作为核心技术。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大规模的例子,这些证明大规模不仅仅是可能:它是一种模式。

成功的关是键简单性且一致性。CPython,Python的主要虚拟机,其最大限度地放大了这些特性,从而演变出了一个精确可测的运行时。人们很难发现 Python程序员关心垃圾的收集暂停或应用地启动时间。拥有强大的平台和网络支持,Python其本身自然而然的智能水平可扩展,BitTorrent就是其充分的体现。

此外,规模化主要涵盖测量和迭代。Python是以分析和优化为要义建立的。看Myth #6了解更多Python如何垂直拓展的细节。

Myth #8: Python缺少好的并发支持

除了偶尔叫嚣性能和规模化的问题,有人想提的技术些,”Python缺乏并发,”或者,”GIL怎么样?”如果几十个反例仍不足以支持Python水平及垂直拓展规模的能力,那么再更深地解释CPython实现细节也不会有帮助,所以我会简短些。

Python拥有强大的并发原语,包括generators, greenlets, Deferreds, 和futures.。Python有优秀的并发框架,包括eventlet, gevent,和Twisted。Python在定制运行时尚投入了惊人的工作量,包括Stackless和 PyPy。所有烦人这些和更多表明,根本不存工程师们在Python并发编程方面的缺憾。同时,所有这些都正在被正式的在企业生产环境中支持或使用。例如,请参考Myth #7。

全局解释器锁,或称GIL,是Python在大多数应用场景下的性能优化,也是几乎所有CPython实现代码的开发上的基础优化。GIL使得Python可以很便利地使用操作系统的线程或轻线程(通常指greenlets),且不影响使用多进程。更多相关信息,请看该主题的Q&A列表,以及Python文档中的介绍。

在PayPal中,一个典型服务的部署需要多台机器,多个进程,多个线程,以及一个数字非常庞大的greenlets,相当于一个非常强大可扩展的并行环境(见下图)。在大多数的企业环境中,团队更倾向于往更高层次过度,谨慎并注重灾难恢复。然而,在某些情况下,每台机器每天Python服务仍然处理数以百万计的请求,而且轻松处理。

一个基于单一worker的协同异步架构草图。最外层的盒子是进程,下一个层次为线程,这里这些线程都是轻线程。操作系统处理线程间的抢占,而I/O异步协同合作。

谬误 #9: Python 程序员很稀缺

事实上,现在使用 Python 的 web 开发者的确没有使用 PHP 或者 Java 的 web 开发者多。这可能主要是由于企业需求和教育之间的相互作用导致的,不过 教育领域(教学所使用的编程语言)的趋势使得情况可能产生变化 。

也就是说,使用 Python 的开发者并不稀缺。现在全世界有数百万使用 Python 的开发者。已有几十个Python 技术大会、 StackOverflow 上成千上万的 Python 内容问答、雇佣大量使用 Python 的开发者的大企业比如 YouTube 、 美国银行( Bank of American )和 LucasArts/Dreamworks 等等,这些都显而易见地证实了这一点。在 eBay 和 PayPal 我们一直保持拥有几百位使用 Python 的正式开发者,这是怎么做到的呢?

那么,当一个项目被创建时为什么它会被首推?对于孩子来,大学生和教授们来说,Python作为第一门程序设计语言是非常易于学习的。在eBay,仅仅需要一个星期,一个新的Python程序员就能展示一个真正的成果,并且他们开始散发光芒常常只要2-3个月,通过Internet的宝藏(互动式教程,书,文档和开源代码库)一切皆有可能。

另外一个重要的考虑因素是,项目使用Python会更简单,它不会像其他项目那样需要那么多的开发者。在谬误6和谬误9中提到的那样,在Python项目中,学习像Instagram那样的高效团队是一个常见的比喻,并且这确实是我们在eBay和PayPal的经验。

Myth #10: Python不适应于大项目

Myth #7 讨论了大规模运行Python的项目,但开发Python大规模项目是什么情况呢?正如在Myth #9中提到的,大多数Python不被人看好。 然而Instagram在其被亿元美金收购当天达到千万的点击量,而整个公司只有十几个人。Dropbox在2011年只有70个工程师,其他团队更少。所以,Python适合大规模团队吗?

美国银行实际上有超过5000的Python开发者,一个单独的项目超过一千万行Python代码。JP摩根也经历了类似的转变。YouTube也有数千的开发者和数百万行的代码。大规模产品和团队每天都在使用Python,因为它具有良好的模块化和封装特性,在特定方面许多的大规模开发建议是一致的。工具,强大的惯例以及代码审查促使了项目规模化管理的现实。

幸运的是,Python发展于上面所提到的好的奠基。我们在检查执行使用pyflakes以及其他工具进行Python代码的静态分析,正如坚持PEP8——Python语言的基础风格指南。

最后,应该指出的是,除了调度加速Myth #6以及#7中所提到的,使用Python的项目通常需要更少的开发者。我们常见的成功案例中,使用Java或C++的项目通常有3-5开发者耗时2-6个月,最终由单一的开发者在2-6周(或小时,因为这些原因)完成...

可能你不知道的Python历史 互联网视频课程

img

蒂凡妮

关注

人生苦短,我用Python

Python的历史

Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。之所以 选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个Monty 大蟒蛇飞行马戏团的爱好者。

ABC是由Guido参加设计的一种教学语言(没听说过)。就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。 但是ABC语言并没有成功,究其原因,Guido认为是非开放造成的。Guido决心在Python中避免这一错误(的确如此,Python与其它的语言 如C,C++和Java结合的非常好)。同时,他还想实现在ABC中闪现过但未曾实现的东西。

就这样,Python在Guido手中诞生了(真要感谢他)。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来,主要 受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix Shell和C的习惯。

Python的特点

Python是一种脚本语言,它的语法表达优美易读。它具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它的语法有很多与众不同的特性。下面我分别说明一下:

运行方式

Python可以以命令行方式运行,也可以交互式方式运行,还具有图形集成环境,这样开发Python就相当方便。现在已经出现了许多用Python编写的可视化编程软件,用于实现象Delphi一样的功能。

面向对象

Python是一个真正的面向对象语言。它甚至支持异常的处理。如果学过Java,应该对这个不陌生。但其它的脚本语言,如PHP,好象就没有。这使得程序的编写更加清晰,而不需要许多的错误检查了。

模块和包

这一点更象是Java。对于Java的支持,大家可以了解JPython。JPython是用Java写的Python,它完全支持Java,在这个环境下使用Python可以随意地使用Java的类库。

语言扩展

可以用C、C++或Java为Python编写新的新言模块,如函数。或者与Python直接编译在一起,或者采用动态库装入方式实现。也专门有 人编写了一个工具,可以实现为Python自动实现函数接口封装,这就是SWIG(Simplified Wrapper and Interface Generator),或称做简单封装和接口生成器(可以在 http://cs.utah.edu/~beazley/SWIG自由获得)。

有趣的语法

Guido认为Python的语法是非常优美的。其中一点就是,块语句的表示不是C语言常用的{}对,或其它符号对,而是采用缩近表示法!有趣 吧。就这一点来说,Guido的解释是:首先,使用缩近表示法减少了视觉上的混乱,并且使程序变短,这样就减少了需要对基本代码单元注意的范围;其次,它 减少了程序员的自由度,更有利于统一风格,使得阅读别人的程序更容易。感觉还是不错的,就C语言来说,在if语句后面大括号的写法就好几种,不同的人喜欢 不同的样子,还不如统一起来,都不会看得别扭。

在每个类或函数的定义后面,第一行可以是说明语句,根本不需要注释符标记。对于后面跟块语句的语句,后面应跟上一个冒号(:)。一行语句不能太长,因为没有行结束符,如果超长则要使用续行符(/)。还有一些有趣的比如说,象下面的一个比较处理,用C语言为:

if (2

用Python可以表示为

if (2

当然不一定会有什么好处,但是它所宣称的优美的语言毕竟不是虚的。其它的大家可以通过学习自行了解。

Python可以做什么?

那么Python可以做什么呢?我感觉,什么都可以。如果在Windows下,如果想做一个图形界面程序,那么Python可以胜任。可以去wxPython.org看一下,它是一个Python的扩展库,可以用来实现跨平台的图形编程,它支持windows和unix/linux。在那个网 站上有一些演示,可以学习一下。Python可以做CGI。有些主页提供了对Python的CGI支持。现在还有一些用Python做的游戏。如果想了解 更多的Python可以做什么,可以去SourceForge上查找有关Python的项目,上面有很多东西。

结束

在中国Python还处于起步,目前学习研究它的人还不是很多,希望感兴趣的同志加入这一行列。喜欢Python想学习的通知可以加下群643692991都一群喜欢Python的人,要进步快当然需要一个好的学习环境,一起学习进步才快。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP