
全球各地的Python程序員都在用什么庫?
我們從最常用的Python包入手,去解答上述這個問題。最初,我列出過去一年在PyPI上下載次數最多的Python包。接下來,深入研究其用途、它們之間的關系和它們備受歡迎的原因。
1、Urllib3
下載次數:8.93億
Urllib3是一個Python的HTTP客戶端,它擁有Python標準庫中缺少的許多功能:
線程安全
連接池
客戶端SSL/TLS驗證
使用分段編碼上傳文件
用來重試請求和處理HTTP重定向的助手
支持gzip和deflate編碼
HTTP和SOCKS的代理支持
不要被名字所誤導,Urllib3并不是urllib2的后繼者,而后者是Python核心的一部分。如果你想使用盡可能多的Python核心功能,或者你能安裝什么東西是受限,那么請查看urlllib.request。
https://docs.python.org/3/library/urllib.request.html#module-urllib.request
對開發者來說,我強烈建議使用requests包(參閱列表中的#6)。這個包之所以會排名,是因為有差不多1200個包依賴urllib3,其中許多這個列表中的排名也很高。
2、Six
下載次數:7.32億
six是一個是Python 2和3的兼容性庫。這個項目旨在支持可同時運行在Python 2和3上的代碼庫。
它提供了許多可簡化Python 2和3之間語法差異的函數。一個容易理解的例子是six.print_()。在Python 3中,打印是通過print()函數完成的,而在Python 2中,print后面沒有括號。因此,有了six.print_()后,你就可以使用一個語句來同時支持兩種語言。
一些事實:
它的名字叫six,是因為二乘以三等于六。
同類庫還可以看看future包。
如果你要將代碼轉換為Python3(并停止支持2),請查看2to3。
雖然我理解它為什么這么受歡迎,但我希望人們能完全放棄Python 2,因為要知道從2020年1月1日起Python 2的官方支持就已停止。
3、botocore、boto3、s3transfer、awscli
這里,我把相關的幾個項目列在一起:
botocore(#3,6.6億次下載)
s3transfer(#7,5.84億次下載)
awscli(#17,3.94億次下載)
boto3(#22,3.29億次下載)
Botocore是AWS的底層接口。Botocore是Boto3庫(#22)的基礎,后者讓你可以使用Amazon S3和Amazon EC2一類的服務。Botocore還是AWS-CLI的基礎,后者為AWS提供統一的命令行界面。
S3transfer(#7)是用于管理Amazon S3傳輸的Python庫。它正在積極開發中,其介紹頁面不推薦人們現在使用,或者至少等版本固定下來再用,因為其API可能發生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項目都依賴s3transfer。
令人驚訝的是,這些針對AWS庫的排名竟如此之高——這充分說明了AWS有多厲害。
4、Pip
下載次數:6.27億
我想,你們大多數人都知道并且很喜歡pip,它是Python的包安裝器。你可以用pip輕松地從Python包索引和其他索引(例如本地鏡像或帶有私有軟件的自定義索引)來安裝軟件包。
有關pip的一些有趣事實:
pip是“Pip Installs Packages”的首字母遞歸縮寫。
pip很容易使用。要安裝一個包只需pip install<package name>即可,而刪除包只需pip uninstall<package name>即可。
優點之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細規范。大多數Python項目都包含這樣的文件。
5、Python-dateutil
下載次數:6.17億
python-dateutil模塊提供了對標準datetime模塊的強大擴展。我的經驗是,常規的Python datetime缺少哪些功能,python-dateutil就能補足那一塊。
6、Requests
下載次數:6.11億
Requests建立在我們的#1庫——urllib3基礎上。它讓Web請求變得非常簡單。相比urllib3來說,很多人更喜歡這個包。而且使用它的開發者可能也比urllib3更多。后者更偏底層,并且考慮到它對內部的控制級別,它一般是作為其他項目的依賴項。
7、S3transfer
這里把#3、#7、#17和#22放在一起介紹,因為它們的關系非常密切。
8、Certifi
下載次數:5.52億
近年來,幾乎所有網站都轉向SSL,你可以通過地址欄中的小鎖符號來識別它。加了小鎖意味著與該站點的通信是安全和加密的,能防止竊聽行為。
9、Idna
下載次數:5.27億
根據其PyPI頁面,idna提供了“對RFC5891中指定的應用程序中國際化域名(IDNA)協議的支持。”
10、PyYAML
下載次數:5.25億
YAML是一種數據序列化格式。它的設計宗旨是讓人類和計算機都能很容易地閱讀代碼——人類很容易讀寫它的內容,計算機也可以解析它。
11、Pyasn1
下載次數:5.12億
像上面的IDNA一樣,這個項目也非常有用:
ASN.1類型和DER/BER/CER編碼(X.208)的純Python實現
所幸這個已有數十年歷史的標準有很多信息可用。ASN.1是Abstract Syntax Notation One的縮寫,它就像是數據序列化的教父。它來自電信行業。也許你知道協議緩沖區或Apache Thrift?這就是它們的1984年版本。
ASN.1描述了系統之間的跨平臺接口,以及可以通過該接口發送的數據結構。
還記得Certifi(請參閱#8)嗎?ASN.1用于定義HTTPS協議和其他許多加密系統中使用的證書格式。它也用在了SNMP、LDAP、Kerberos、UMTS、LTE和VOIP協議中。
12、Docutils
下載次數:5.08億
Docutils是一個模塊化系統,用來將純文本文檔處理為很多有用的格式,例如HTML、XML和LaTeX等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似于MarkDown的易讀標記語法。
你可能聽說過,甚至讀過PEP文檔。
13、Chardet
下載次數:5.01億
你可以用chardet模塊來檢測文件或數據流的字符集。比如說,需要分析大量隨機文本時,這會很有用。但你也可以在處理遠程下載的數據,但不知道用的是什么字符集時使用它。
14、RSA
下載次數:4.92億
rsa包是一個純Python的RSA實現。它支持:
加密和解密
簽名和驗證簽名
根據PKCS#1 1.5版生成密鑰
它既可以用作Python庫,也能在命令行中使用。
一些事實:
RSA是RonRivest、Adi Shamir和Leonard Adleman三人姓的首字母。他們在1977年發明該算法。
RSA是最早的公鑰密碼系統之一,被廣泛用于安全數據傳輸。在這樣的密碼系統中,有兩個密鑰:公共部分和私有部分。你用公鑰加密數據,只能用私鑰解密數據。
RSA是一種slow algorithm。它很少用于直接加密用戶數據。通常,RSA用于安全傳遞對稱密鑰加密的共享密鑰,這樣加密和解密大量數據時會快得多。
15、Jmespath
下載次數:4.73億
在Python中用JSON非常容易,因為它在Python字典上的映射非常好。對我來說,這是它的特性之一。
16、Setuptools
下載次數:4.01億
它是用于創建Python包的工具。不過,其文檔很糟糕。它沒有清晰描述它的用途,并且文檔中包含無效鏈接。的信息源是這個站點,特別是這個創建Python包的指南。
17、Awscli
這里把#3、#7、#17和#22放在一起介紹,因為它們的關系非常密切。
18、Pytz
下載次數:3.94億次
像dateutils(#5)一樣,這個庫可幫助你處理日期和時間。有時候,時區處理起來可能很麻煩。幸好有這樣的包,可以讓事情變得簡單些。
我自己關于計算機上處理時間的經驗總結來說是:始終在內部使用UTC。僅當生成供人類讀取的輸出時,才轉換為本地時間。
19、Futures
下載次數:3.89億
從Python 3.2開始,python提供current.futures模塊,可幫助你實現異步執行。futures包是該庫適用于Python 2的backport。它不適用于Python3用戶,因為Python 3原生提供了該模塊。
正如我之前提到的,從2020年1月1日起,Python 2的官方支持停止。希望我明年重新再來看的時候,這個包不會再出現在前22名中吧。
20、Colorama
下載次數:3.7億
使用Colorama,你可以為終端添加一些顏色。
這樣做起來非常容易,具體請查看以下示例代碼:
from colorama import Fore,Back,Style
print(Fore.RED+'some red text')
print(Back.GREEN+'and with a green background')
print(Style.DIM+'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
21、Simplejson
下載次數:3.41億
原生的json模塊有什么問題,才需要這種高級替代方案呢?并沒有!實際上,Python的json就是simplejson。但是simplejson也有一些優點:
它適用于更多的Python版本。
它比Python更新的頻率更頻繁。
它有用C編寫的(可選)部分,因此速度非常快。
22、Boto3
這里把#3、#7、#17和#22放在一起介紹,因為它們的關系非常密切。