<samp id="tdkee"></samp>

    <mark id="tdkee"><acronym id="tdkee"></acronym></mark>

  1. 免费看又黄又无码的网站_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片_日本最新免费二区三区

    ×

    Python常用的22 個工具包

    分類:互聯(lián)網(wǎng)熱點 編輯:聊聊云計算 瀏覽量:4
    2020-07-10 11:21:32
    整理 | 高教幫 來源 | 互聯(lián)王
    首先,我列出了最近一年內(nèi)PyPI上下載量最高的Python包?,F(xiàn)在我們來看看這些包的作用,他們之間的關系,以及為什么如此流行。1. Urllib38.93億次下載Urllib3 是 Python 的 HTTP 客戶端,它提供了許多 Python 標準庫沒有的功能。線程安全連接池客戶端 SSL/TLS 驗證使用 multipart 編碼進行文件上傳用于重傳請求并處理 HTTP 重定向的輔助功能支持 gzip 和 deflate 編碼支持 HTTP 和 SOCKS 代理盡管名字叫做 Urllib3,但它并不是 Python 自帶的 urllib2 的后繼版本。如果你想盡可能使用 Python 的核心功能(比如由于某些限制導致不能安裝),那么可以看看 urllib.request。對于最終用戶,我強烈推薦 requests 包(參考列表中的第六項)。Urllib3 之所以排名第一是因為幾乎 1200 個軟件包都依賴它,許多這些軟件包也都在列表中名列前茅。2. Six7.32億次下載Six 是 Python 2 和 Python 3 兼容性工具。該項目的目的是讓代碼能夠同時在 Python 2 和 Python 3 上運行。它提供了許多函數(shù),掩蓋了 Python 2 和 Python 3 之間的語法差異。最容易理解的例子就是six.print_()。在 Python 3 中,輸出時需要使用 print() 函數(shù),而 Python 2 中是使用不帶括號的 print。因此,使用 six.print_() 可以同時支持兩種語言。 重點:包的名字 six 來自于2 x 3 = 6類似的庫還有 future如果想將代碼轉(zhuǎn)換成 Python 3(同時不再支持 Python 2),可以看看 2to3盡管我理解該包如此流行,但還是希望人們盡快拋棄 Python 2,特別是從2020年1月1日起官方已經(jīng)不再支持 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名)庫的基礎,后者可以讓你訪問亞馬遜的S3、EC2等服務。Botocore 也是 AWS-CLI 的基礎,后者是 AWS 的命令行界面。s3transfer(第七名)是用于管理S3傳輸?shù)?Python 庫。該庫仍在開發(fā)中,它的主頁依然不建議使用,或者使用時至少要固定版本,因為即使在小版本號之間它的API也可能會發(fā)生變化。boto3、AWS-CLI 和許多其他項目都依賴于 s3transfer。AWS 相關的庫的排名如此高,正說明了 AWS 的服務是多么流行。4. Pip6.27億次下載我猜許多人都知道并且喜愛 pip(Python的包安裝工具)。使用 pip 從 Python Package Index和其他倉庫(如本地鏡像或包含私有軟件的自定義倉庫等)安裝軟件包不費吹灰之力。關于 pip 的趣事:Pip 的名字是個遞歸定義:Pip Installs PackagesPip 非常容易使用。安裝一個軟件包只需要執(zhí)行 pip install <軟件包名>。刪除只需要執(zhí)行 pip uninstall <軟件包名>。Pip 最大的好處就是它可以安裝一系列包,通常會放在 requirements.txt 文件中。該文件還可以指定每個包的詳細版本號。絕大多數(shù) Python 項目都會包含這個文件。與 virtualenv(第57名)結(jié)合使用 pip,可以創(chuàng)建可預測的、獨立的環(huán)境,而不會與系統(tǒng)本身的環(huán)境互相影響。5. python-dateutil6.17億次下載Python-dateutil 模塊為標準的 datetime 模塊提供了強大的功能擴展。普通的 Python datetime 無法做到的事情都可以使用 python-dateutil 完成。 用這個庫可以完成許多非??岬墓δ堋N抑慌e一個非常有用的例子:從日志文件中模糊解析日期字符串:from dateutil.parser import parselogline = INFO 2020-01-01T00:00:01 Happy new year, human.timestamp = parse(log_line, fuzzy=True)print(timestamp)# 2020-01-01 00:00:016. requests6.11億次下載Requests 基于下載量第一的庫 urllib3。有了它,發(fā)送請求變得極其簡單。許多人對 requests 的喜愛超過了 urllib3,因此 requets 的最終用戶可能比 urllib3 還要多。后者更底層,通常作為其他項目的依賴出現(xiàn)。下面的例子演示了 requests 有多么容易使用:import requestsr = requests.get( https://api.github.com/user , auth=( user , pass ))r.status_code# 200r.headers[ content-type ]# application/json; charset=utf8r.encoding# utf-8r.text# u {"type":"User"...r.json()# {u disk_usage : 368627, u private_gists : 484, ...}7. s3transfer第3、7、17和22名互相關聯(lián),所以請參見第3名的介紹。8. Certifi5.52億次下載近年來,幾乎所有網(wǎng)站都開始使用SSL,這一點可以從地址欄中的鎖圖標看出來,該圖標的意思是網(wǎng)站是安全的、加密的,可以避免竊聽。加密基于SSL證書,SSL證書由可信的公司或非營利組織負責簽發(fā),如 LetsEncrypt。這些組織會對利用它們的證書對簽發(fā)的證書進行數(shù)字簽名。利用這些證書的公開部分,瀏覽器就可以驗證網(wǎng)站的簽名,從而證明你訪問的是真正的網(wǎng)站,而且別人沒有在竊聽數(shù)據(jù)。Python 也可以做到同樣的功能,這就需要用到 certifi。它和 Chrome、Firefox 和 Edge 等Web瀏覽器中包含的根證書集合沒有什么區(qū)別。Certifi 是一個根證書集合,這樣 Python 代碼就可以驗證SSL證書的可信度。許多項目都信賴并依賴 certifi,可以在這里看到這些項目。這也是為何該項目排名如此高的原因。9. Idna5.27億次下載根據(jù) PyPI 的頁面,idna提供“對于RFC5891中定義的IDNA協(xié)議(Internationalised Domain Names in Applications)的支持”。我們來看看 idna 是什么意思:IDNA 是處理包含非 ASCII 字符的域名的規(guī)則。但原始的域名不是已經(jīng)支持非 ASCII 字符了嗎?那么問題何在?問題是許多應用程序(如Email客戶端和Web瀏覽器等)并不支持非 ASCII 字符?;蛘吒唧w地說,Email 和 HTTP 協(xié)議并不支持這些字符。在許多國家這并不是問題,但像中國、俄羅斯、德國、印尼等國家就很不方便。因此,這些國家的一些聰明人聯(lián)合起來提出了 IDNA,也并非完全偶然。IDNA 的核心是兩個函數(shù):ToASCII 和 ToUnicode。ToASCCI 會將國際化的 Unicode 域名轉(zhuǎn)換成 ASCII 字符串,而 ToUnicode 會做相反的處理。在 IDNA 包中,這兩個函數(shù)叫做 idna.encode() 和 idna.decode(),參見下面的例子:import idnaidna.encode( ドメイン.テスト )# b xn--eckwd4c7c.xn--zckzahprint(idna.decode( xn--eckwd4c7c.xn--zckzah ))# ドメイン.テスト該編碼的詳細內(nèi)容可以參見 RFC3490。10. PyYAML5.25億次下載YAML 是一種數(shù)據(jù)序列化格式。它的設計目標是同時方便人類和機器閱讀——人類很容易讀懂,計算機解析也不難。PyYAML 是 Python 的 YAM 解析器和編碼器,也就是說它可以讀寫 YAML 格式。它可以將任何 Python 對象編碼為 YAML:列表,字典,甚至類實例都可以。Python 提供了自己的配置管理器,但 YAML 提供的功能遠勝于 Python 自帶的 ConfigParser(只能使用最基本的.ini文件)。例如,YAML 能存儲任何數(shù)據(jù)類型:boolean,list,float等。ConfigParse 的內(nèi)部一切都保存為字符串。如果你要用 ConfigParser 來加載證書,就需要指明你需要的是整數(shù):config.getint(“section”, “my_int”)而 pyyaml 能夠自動識別類型,因此只需這樣就能獲得 int:config[“section”][“my_int”]YAML 還允許任意深度的嵌套,盡管并非每個項目都需要,但非常方便。你可以自行決定使用哪一個,但許多項目都使用 YAML 作為配置文件,因此該項目的流行度非常高。11. pyasn15.12億次下載像 IDNA 一樣,這個項目的描述的信息量也非常大: ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實現(xiàn)。幸運的是,我們依然能找到這個幾十年之久的標準的許多資料。ASN.1 是 Abstract Syntax Notation One(抽象語法記法一)的縮寫,是數(shù)據(jù)序列化的鼻祖。它來自于通訊行業(yè)。也許你知道 protocol buffer 或者 Apache Thrift 吧?ASN.1正是它們的1984年版本。ASN.1 描述了一種不同系統(tǒng)之間的跨平臺的接口,可以通過該接口發(fā)送數(shù)據(jù)結(jié)構(gòu)。還記得第8名的 certifi 嗎?ASN.1 用于定義 HTTPS 協(xié)議以及許多其他加密系統(tǒng)中使用的證書的格式。ASN.1 還廣泛用于 SNMP、LDAP、Kerberos、UMTS、LTE 和 VOIP 等協(xié)議中。它是個非常復雜的標準,人們已經(jīng)發(fā)現(xiàn)某些實現(xiàn)充滿了脆弱性。你可以看看 Reddit 上的這個關于 ASN.1 的討論(https://www.reddit.com/r/programming/comments/1hf7ds/useful_old_technologies_asn1/)。除非真正必要,否則我建議不要使用它。但由于許多地方都在使用該協(xié)議,因此許多包都依賴于它。12. docutils5.08億次下載Docutils 是一個模塊化系統(tǒng),用于將純文本文檔轉(zhuǎn)換成其他格式,如 HTML、XML 和 LaTeX等。docutils 可以讀取 reStructuredText 格式(一種類似于 MarkDown 的容易閱讀的格式)的純文本文檔。我猜你一定聽說過 PEP 文檔,甚至可能閱讀過。PEP 文檔是什么?PEP 的意思是 Python Enhanced Proposal(Python增強提案)。PEP 是一篇設計文檔,用于給 Pytho n社區(qū)提供信息,或者為 Python(或其處理器、環(huán)境)描述一個新特性。PEP 應該提供特性的精確的技術標準,并給出該特性的理由。PEP 文檔就是使用固定的 reStructuredText 模板,然后通過 docutils 轉(zhuǎn)換成漂亮的文檔。Sphinx 的核心也使用了 docutils。Sphinx 用于創(chuàng)建文檔項目。如果說 docutils 是一臺機器,那么 Sphinx 就是一個工廠。它的最初設計目的是構(gòu)建P ython 本身的文檔,但許多其他項目也利用 Sphinx 來創(chuàng)建文檔。你一定讀過 readthedocs.org 上的文檔吧?那里的文檔都是使用 Sphinx 和 docutils 創(chuàng)建的。13. Chardet5.01億下載你可以使用 chardet 模塊來檢查文件或數(shù)據(jù)流的字符集。在分析大量隨機的文本時這個功能非常有用。但也可以用來判斷遠程下載的數(shù)據(jù)的字符串。在安裝 chardet 后,就可以使用命令行工具 chardetect,使用方法如下:chardetect somefile.txtsomefile.txt: ascii with confidence 1.0也可以在程序中使用該庫,參見文檔(https://chardet.readthedocs.io/en/latest/usage/1.html)。Requests 和許多其他包都依賴于 chardet。我估計不會有太多人直接使用 chardet,所以它的流行度肯定是來自于這些依賴。14. RSA4.92億次下載Rsa是 RSA 的純 Python 實現(xiàn)。它支持如下功能:加密和解密簽名和簽名驗證根據(jù) PKCS#1 version 1.5生成秘鑰它可以作為 Python 庫使用,也可以在命令行上使用。RSA 名稱中的三個字母來自于三個人的姓:Ron Rivest,Adi Shamir,和Leonard Adleman。他們于1977年發(fā)明了該算法。RSA 是最早出現(xiàn)的一批公鑰加密系統(tǒng),廣泛用于安全數(shù)據(jù)傳輸。這種加密系統(tǒng)包括兩個秘鑰:一個是公鑰,一個是私鑰。使用公鑰加密數(shù)據(jù),然后該數(shù)據(jù)只能用私鑰進行解密。RSA 算法很慢。通常并不使用 RSA 算法直接加密用戶數(shù)據(jù),而是用它來加密對稱加密系統(tǒng)中使用的共享秘鑰,因為對稱加密系統(tǒng)速度很快,適合用來加密大量數(shù)據(jù)。下面 代碼演示了 RSA 的使用方法:import rsa# Bob creates a key pair:(bob_pub, bob_priv) = rsa.newkeys(512)# Alice ecnrypts a message for Bob# with his public keycrypto = rsa.encrypt( hello Bob! , bob_pub)# When Bob gets the message, he# decrypts it with his private key:message = rsa.decrypt(crypto, bob_priv)print(message.decode( utf8 ))# hello Bob!假設 Bob 擁有私鑰 private,Alice 就能確信只有 Bob 才能閱讀該信息。但 Bob 并不能確信 Alice 是信息的發(fā)送者,因為任何人都可以獲得 Bob 的公鑰。為了證明發(fā)送者的確是 Alice,她可以使用自己的私鑰對信息進行簽名。Bob 可以使用 Alice 的公鑰對簽名進行驗證,來確保發(fā)送者的確是 Alice。許多其他包都依賴于 rsa,如 google-auth(第37名),oauthlib(第54名),awscli(第17名)。這個包并不會經(jīng)常被直接使用,因為有許多更快、更原生的方法。15. Jmespath4.73億次下載在 Python 中使用 JSON 很容易,因為 JSON 可以完美地映射到 Python 的字典上。我認為這是最好的特性之一。說實話我從來沒聽說過 jmepath 這個包,盡管我使用過很多 JSON。我會使用 json.loads() 然后手動從字典中讀取數(shù)據(jù),或許還得寫幾個循環(huán)。JMESPath,讀作“James path”,能更容易地在 Python 中使用 JSON。你可以用聲明的方式定義怎樣從 JSON 文檔中讀取數(shù)據(jù)。下面是一些最基本的例子: import jmespath# Get a specific elementd = {"foo": {"bar": "baz"}}print(jmespath.search( foo.bar , d))# baz# Using a wildcard to get all namesd = {"foo": {"bar": [{"name": "one"}, {"name": "two"}]}}print(jmespath.search( foo.bar[*].name , d))# [“one”, “two”]這僅僅是它的冰山一角。更多用法參見它的文檔和 PyPI 主頁。16. Setuptools4.01億次下載Setuptools 是用來創(chuàng)建 Python 包的工具。這個項目的文檔很糟糕。文檔并沒有描述它的功能,還包含死鏈接。真正的好文檔在這里:https://packaging.python.org/,以及這篇文章中關于怎樣創(chuàng)建 Python 包的教程:https://packaging.python.org/tutorials/packaging-projects/。17. awscli第3、7、17和22名互相關聯(lián),所以請參見第3名的介紹。18. pytz3.94億次下載類似于第5名的 dateutils,該庫可以幫助你操作日期和時間。處理時區(qū)很麻煩。幸運的是,這個包可以讓時區(qū)處理變得很容易。關于時間,我的經(jīng)驗是:在內(nèi)部永遠使用UTC,只有在需要產(chǎn)生供人閱讀的輸出時才轉(zhuǎn)換成本地時間。下面是 pytz 的例子:from datetime import datetimefrom pytz import timezoneamsterdam = timezone( Europe/Amsterdam )ams_time = amsterdam.localize(datetime(2002, 10, 27, 6, 0, 0))print(ams_time)# 2002-10-27 06:00:00+01:00# It will also know when it s Summer Time# in Amsterdam (similar to Daylight Savings Time):ams_time = amsterdam.localize(datetime(2002, 6, 27, 6, 0, 0))print(ams_time)# 2002-06-27 06:00:00+02:00更多文檔和例子可以參見 PyPI 頁面。19. Futures3.89億次下載從 Python 3.2 開始,python 開始提供 concurrent.futures 模塊,可以幫你執(zhí)行異步操作。futures 包是該庫的反向移植,所以它是用于 Python 2 的。當前的 Python 3 版本不需要該包,因為 Python 3 本身就提供了該功能。前面我說過,從2020年1月1日起官方已經(jīng)停止支持 Python 2。我希望明年再做這個列表的時候,不再看到這個包排進前22名。下面是 futures 包的基本用法:from concurrent.futures import ThreadPoolExecutorfrom time import sleepdef return_after_5_secs(message): sleep(5) return messagepool = ThreadPoolExecutor(3)future = pool.submit(return_after_5_secs, ("Hello world"))print(future.done())# Falsesleep(5)print(future.done())# Trueprint(future.result())# Hello World可見,我們可以創(chuàng)建一個線程池,然后提交一個函數(shù),讓某個線程執(zhí)行。同時,你的程序會繼續(xù)在主線程上運行。這是實現(xiàn)并行執(zhí)行的一種很容易的方式。20. Colorama3.70億次下載你可以使用 Colorama 在終端上添加顏色:下面的示例演示了實現(xiàn)這個功能有多么容易:from colorama import Fore, Back, Styleprint(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. Simplejson3.41億次下載Python 自帶的 json 模塊有什么問題導致了這個包有如此高的排名?沒有任何問題!實際上, Python 的 json 就是 simplejson。但 simplejson 有一些優(yōu)點:能在更多 Python 版本上運行更新頻率高于 Python一部分代碼是用C編寫的,運行得非??煊袝r候你會看到腳本中這樣寫:try: import simplejson as jsonexcept ImportError: import json不過,除非確實需要一些標準庫中沒有的功能,我依然會使用 json。SImplejson 可能比 json快很多,因為它的一部分是用C實現(xiàn)的。但是除非你要處理幾千個 JSON 文件,否則這點速度提升并不明顯。此外還可以看看 UltraJSON,這是個幾乎完全用C編寫的包,應該速度更快。22. boto3第3、7、17和22名互相關聯(lián),所以請參見第3名的介紹。結(jié)束語只寫22個包很難,因為后面的許多包都是終端用戶更傾向使用的包。寫這篇文章給了我一些啟示:許多排名靠前的包提供一些核心的功能,如處理時間、配置文件、加密和標準化等。它們通常是其他項目的依賴。最常見的使用場景就是連接。許多包提供的功能就是連接到服務器,或者支持其他包連接服務器。其他包是對 Python 的擴展,比如用于創(chuàng)建 Python 包的工具,創(chuàng)建文檔的工具,創(chuàng)建版本兼容性的工具,等等。
    END來源:互聯(lián)網(wǎng)摘抄
    關注微信公眾號『數(shù)據(jù)分析與統(tǒng)計學之美』,后臺回復"入群" 拉你進群哦,氣氛杠杠的。
    好文!必須在看

    聲明:免責聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,也不承認相關法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)

    送郵件至:operations@xinnet.com進行舉報,并提供相關證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時

    需注明出處:新網(wǎng)idc知識百科

    免費咨詢獲取折扣

    Loading
    国产精品视频白浆免费视频_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片

    <samp id="tdkee"></samp>

      <mark id="tdkee"><acronym id="tdkee"></acronym></mark>