當前位置: 妍妍網 > 碼農

下載量過億的 15 個 Python 庫

2024-06-10碼農

點選上方 " Python人工智慧技術 " 關註, 星標或者置頂

22點24分準時推播,第一時間送達

後台回復「 大禮包 」,送你特別福利

編輯:樂樂 | 來自: 七天小碼哥

上一篇:

正文

大家好,我是Python人工智慧技術

今天給大家分享最近一年內PyPI上下載量最高的Python包。現在我們來看看這些包的作用,他們之間的關系,以及為什麽如此流行。

1. Urllib3:8.93億次下載

Urllib3 是 Python 的 HTTP 客戶端,它提供了許多 Python 標準庫沒有的功能。

  • 執行緒安全

  • 連線池

  • 客戶端 SSL/TLS 驗證

  • 使用 multipart 編碼進行檔上傳

  • 用於重傳請求並處理 HTTP 重新導向的輔助功能

  • 支持 gzip 和 deflate 編碼

  • 支持 HTTP 和 SOCKS 代理

  • 盡管名字叫做 Urllib3,但它並不是 Python 內建的 urllib2 的後繼版本。如果你想盡可能使用 Python 的核心功能(比如由於某些限制導致不能安裝),那麽可以看看 urllib.request。

    對於終端使用者,我強烈推薦 requests 包(參考列表中的第六項)。Urllib3 之所以排名第一是因為幾乎 1200 個軟體包都依賴它,許多這些軟體包也都在列表中名列前茅。

    2. Six:7.32億次下載

    Six 是 Python 2 和 Python 3 相容性工具。該計畫的目的是讓程式碼能夠同時在 Python 2 和 Python 3 上執行。

    它提供了許多函式,掩蓋了 Python 2 和 Python 3 之間的語法差異。最容易理解的例子就是six.print_()。在 Python 3 中,輸出時需要使用 print() 函式,而 Python 2 中是使用不帶括弧的 print。因此,使用 six.print_() 可以同時支持兩種語言。

    重點:

  • 包的名字 six 來自於2 x 3 = 6

  • 類似的庫還有 future

  • 如果想將程式碼轉換成 Python 3(同時不再支持 Python 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名)庫的基礎,後者可以讓你存取亞馬遜的S3、EC2等服務。

    Botocore 也是 AWS-CLI 的基礎,後者是 AWS 的命令列界面。

    s3transfer(第七名)是用於管理S3傳輸的 Python 庫。該庫仍在開發中,它的主頁依然不建議使用,或者使用時至少要固定版本,因為即使在小版本號之間它的API也可能會發生變化。

    boto3、AWS-CLI 和許多其他計畫都依賴於 s3transfer。

    AWS 相關的庫的排名如此高,正說明了 AWS 的服務是多麽流行。

    4. Pip:6.27億2次下載

    我猜許多人都知道並且喜愛 pip(Python的包安裝工具)。使用 pip 從 Python Package Index和其他倉庫(如本地映像或包含私有軟體的自訂倉庫等)安裝軟體包不費吹灰之力。

    關於 pip 的趣事

  • Pip 的名字是個遞迴定義:Pip Installs Packages

  • Pip 非常容易使用。安裝一個軟體包只需要執行 pip install <軟體包名>。刪除只需要執行 pip uninstall <軟體包名>。

  • Pip 最大的好處就是它可以安裝一系列包,通常會放在 requirements.txt 檔中。該檔還可以指定每個包的詳細版本號。絕大多數 Python 計畫都會包含這個檔。

  • 與 virtualenv(第57名)結合使用 pip,可以建立可預測的、獨立的環境,而不會與系統本身的環境互相影響。

  • 5. python-dateutil:6.17億次下載

    Python-dateutil 模組為標準的 datetime 模組提供了強大的功能擴充套件。普通的 Python datetime 無法做到的事情都可以使用 python-dateutil 完成。

    用這個庫可以完成許多非常酷的功能。我只舉一個非常有用的例子:從日誌檔中模糊解析日期字串:

    from dateutil.parser import parse
    logline = INFO 2020-01-01T00:00:01 Happy new year, human.
    timestamp = parse(log_line, fuzzy=True)
    print(timestamp)
    # 2020-01-01 00:00:01

    6. requests:6.11億次下載

    Requests 基於下載量第一的庫 urllib3。有了它,發送請求變得極其簡單。許多人對 requests 的喜愛超過了 urllib3,因此 requets 的終端使用者可能比 urllib3 還要多。後者更底層,通常作為其他計畫的依賴出現。

    下面的例子演示了 requests 有多麽容易使用:

    import requests
    r = requests.get( https://api.github.com/user , auth=( user , pass ))
    r.status_code
    # 200
    r.headers[ content-type ]
    # application/json; charset=utf8
    r.encoding
    # utf-8
    r.text
    # u {"type":"User"...
    r.json()
    # {u disk_usage : 368627, u private_gists : 484, ...}

    7. s3transfer

    第3、7、17和22名互相關聯,所以請參見第3名的介紹。

    8. Certifi:5.52億次下載

    近年來,幾乎所有網站都開始使用SSL,這一點可以從位址列中的鎖圖示看出來,該圖示的意思是網站是安全的、加密的,可以避免竊聽。加密基於SSL證書,SSL證書由可信的公司或非營利組織負責簽發,如 LetsEncrypt。這些組織會對利用它們的證書對簽發的證書進行數位簽名。

    利用這些證書的公開部份,瀏覽器就可以驗證網站的簽名,從而證明你存取的是真正的網站,而且別人沒有在竊聽數據。

    Python 也可以做到同樣的功能,這就需要用到 certifi。它和 Chrome、Firefox 和 Edge 等Web瀏覽器中包含的根證書集合沒有什麽區別。

    Certifi 是一個根證書集合,這樣 Python 程式碼就可以驗證SSL證書的可信度。

    許多計畫都信賴並依賴 certifi,可以在這裏看到這些計畫。這也是為何該計畫排名如此高的原因。

    9. Idna:5.27億次下載

    根據 PyPI 的頁面,idna提供「對於RFC5891中定義的IDNA協定(Internationalised Domain Names in Applications)的支持」。

    我們來看看 idna 是什麽意思:

    IDNA 是處理包含非 ASCII 字元的網域名稱的規則。但原始的網域名稱不是已經支持非 ASCII 字元了嗎?那麽問題何在?

    問題是許多應用程式(如Email客戶端和Web瀏覽器等)並不支持非 ASCII 字元。或者更具體地說,Email 和 HTTP 協定並不支持這些字元。

    在許多國家這並不是問題,但像中國、俄羅斯、德國、印尼等國家就很不方便。因此,這些國家的一些聰明人聯合起來提出了 IDNA,也並非完全偶然。

    IDNA 的核心是兩個函式:ToASCII 和 ToUnicode。ToASCCI 會將國際化的 Unicode 網域名稱轉換成 ASCII 字串,而 ToUnicode 會做相反的處理。在 IDNA 包中,這兩個函式叫做 idna.encode() 和 idna.decode(),參見下面的例子:

    import idna
    idna.encode( ドメイン.テスト )
    # b xn--eckwd4c7c.xn--zckzah
    print(idna.decode( xn--eckwd4c7c.xn--zckzah ))
    # ドメイン.テスト

    10. PyYAML:5.25億次下載

    YAML 是一種數據序列化格式。它的設計目標是同時方便人類和機器閱讀——人類很容易讀懂,電腦解析也不難。

    PyYAML 是 Python 的 YAM 解析器和編碼器,也就是說它可以讀寫 YAML 格式。它可以將任何 Python 物件編碼為 YAML:列表,字典,甚至類例項都可以。

    Python 提供了自己的配置管理器,但 YAML 提供的功能遠勝於 Python 內建的 ConfigParser(只能使用最基本的.ini檔)。

    例如,YAML 能儲存任何數據型別:boolean,list,float等。ConfigParse 的內部一切都保存為字串。如果你要用 ConfigParser 來載入證書,就需要指明你需要的是整數:

    config.getint(「p」, 「my_int」)

    而 pyyaml 能夠自動辨識型別,因此只需這樣就能獲得 int:

    config[「p」][「my_int」]

    YAML 還允許任意深度的巢狀,盡管並非每個計畫都需要,但非常方便。

    你可以自行決定使用哪一個,但許多計畫都使用 YAML 作為配置檔,因此該計畫的流行度非常高。

    11. pyasn1:5.12億次下載

    像 IDNA 一樣,這個計畫的描述的資訊量也非常大:

    ASN.1 型別和 DER/BER/CER 編碼(X.208)的純 Python 實作。

    幸運的是,我們依然能找到這個幾十年之久的標準的許多資料。ASN.1 是 Abstract Syntax Notation One(抽象語法記法一)的縮寫,是數據序列化的鼻祖。它來自於通訊行業。也許你知道 protocol buffer 或者 Apache Thrift 吧?ASN.1正是它們的1984年版本。ASN.1 描述了一種不同系統之間的跨平台的介面,可以透過該介面發送數據結構。

    還記得第8名的 certifi 嗎?ASN.1 用於定義 HTTPS 協定以及許多其他加密系統中使用的證書的格式。ASN.1 還廣泛用於 SNMP、LDAP、Kerberos、UMTS、LTE 和 VOIP 等協定中。

    它是個非常復雜的標準,人們已經發現某些實作充滿了脆弱性。

    你可以看看 Reddit 上的這個關於 ASN.1 的討論

    (https://www.reddit.com/r/programming/comments/1hf7ds/useful_old_technologies_asn1/)。

    除非真正必要,否則我建議不要使用它。但由於許多地方都在使用該協定,因此許多包都依賴於它。

    12. docutils:5.08億次下載

    Docutils 是一個模組化系統,用於將純文本文件轉換成其他格式,如 HTML、XML 和 LaTeX等。docutils 可以讀取 reStructuredText 格式(一種類似於 MarkDown 的容易閱讀的格式)的純文本文件。

    我猜你一定聽說過 PEP 文件,甚至可能閱讀過。PEP 文件是什麽?

    PEP 的意思是 Python Enhanced Proposal(Python增強提案)。PEP 是一篇設計文件,用於給 Pytho n社群提供資訊,或者為 Python(或其處理器、環境)描述一個新特性。PEP 應該提供特性的精確的技術標準,並給出該特性的理由。

    PEP 文件就是使用固定的 reStructuredText 樣版,然後透過 docutils 轉換成漂亮的文件。

    Sphinx 的核心也使用了 docutils。Sphinx 用於建立文件計畫。如果說 docutils 是一台機器,那麽 Sphinx 就是一個工廠。它的最初設計目的是構建P ython 本身的文件,但許多其他計畫也利用 Sphinx 來建立文件。

    你一定讀過 readthedocs.org 上的文件吧?那裏的文件都是使用 Sphinx 和 docutils 建立的。

    13. Chardet:5.01億下載

    你可以使用 chardet 模組來檢查檔或數據流的字元集。在分析大量隨機的文本時這個功能非常有用。但也可以用來判斷遠端下載的數據的字串。

    在安裝 chardet 後,就可以使用命令列工具 chardetect,使用方法如下:

    chardetect somefile.txt
    somefile.txt: ascii with confidence 1.0

    也可以在程式中使用該庫,

    參見文件(https://chardet.readthedocs.io/en/latest/usage.html)。

    Requests 和許多其他包都依賴於 chardet。我估計不會有太多人直接使用 chardet,所以它的流行度肯定是來自於這些依賴。

    14. RSA:4.92億次下載

    Rsa是 RSA 的純 Python 實作。它支持如下功能:

  • 加密和解密

  • 簽名和簽名驗證

  • 根據 PKCS#1 version 1.5生成秘鑰

  • 它可以作為 Python 庫使用,也可以在命令列上使用。

  • RSA 名稱中的三個字母來自於三個人的姓:Ron Rivest,Adi Shamir,和Leonard Adleman。他們於1977年發明了該演算法。

  • RSA 是最早出現的一批公鑰加密系統,廣泛用於安全數據傳輸。這種加密系統包括兩個秘鑰:一個是公鑰,一個是私鑰。使用公鑰加密數據,然後該數據只能用私鑰進行解密。

  • RSA 演算法很慢。通常並不使用 RSA 演算法直接加密使用者數據,而是用它來加密對稱加密系統中使用的共享秘鑰,因為對稱加密系統速度很快,適合用來加密大量數據。

  • 下面程式碼演示了 RSA 的使用方法:

    import rsa
    # Bob creates a key pair:
    (bob_pub, bob_priv) = rsa.newkeys(512)
    # Alice ecnrypts a message for Bob
    # with his public key
    crypto = 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 是資訊的發送者,因為任何人都可以獲得 Bob 的公鑰。為了證明發送者的確是 Alice,她可以使用自己的私鑰對資訊進行簽名。Bob 可以使用 Alice 的公鑰對簽名進行驗證,來確保發送者的確是 Alice。

    許多其他包都依賴於 rsa,如 google-auth(第37名),oauthlib(第54名),awscli(第17名)。這個包並不會經常被直接使用,因為有許多更快、更原生的方法。

    15. Jmespath:4.73億次下載

    在 Python 中使用 JSON 很容易,因為 JSON 可以完美地對映到 Python 的字典上。我認為這是最好的特性之一。

    說實話我從來沒聽說過 jmepath 這個包,盡管我使用過很多 JSON。我會使用 json.loads() 然後手動從字典中讀取數據,或許還得寫幾個迴圈。

    JMESPath,讀作「James path」,能更容易地在 Python 中使用 JSON。你可以用聲明的方式定義怎樣從 JSON 文件中讀取數據。下面是一些最基本的例子:

    import jmespath
    # Get a specific element
    d = {"foo": {"bar""baz"}}
    print(jmespath.search( foo.bar , d))
    # baz
    # Using a wildcard to get all names
    d = {"foo": {"bar": [{"name""one"}, {"name""two"}]}}
    print(jmespath.search( foo.bar[*].name , d))
    # [「one」, 「two」]

    這僅僅是它的冰山一角。更多用法參見它的文件和 PyPI 主頁。

    為了跟上AI時代我幹了一件事兒,我建立了一個知識星球社群:ChartGPT與副業。想帶著大家一起探索 ChatGPT和新的AI時代

    有很多小夥伴搞不定ChatGPT帳號,於是我們決定,凡是這三天之內加入ChatPGT的小夥伴,我們直接送一個正常可用的永久ChatGPT獨立帳戶。

    不光是增長速度最快,我們的星球品質也絕對經得起考驗,短短一個月時間,我們的課程團隊釋出了 8個專欄、18個副業計畫

    簡單說下這個星球能給大家提供什麽:

    1、不斷分享如何使用ChatGPT來完成各種任務,讓你更高效地使用ChatGPT,以及副業思考、變現思路、創業案例、落地案例分享。

    2、分享ChatGPT的使用方法、最新資訊、商業價值。

    3、探討未來關於ChatGPT的機遇,共同成長。

    4、幫助大家解決ChatGPT遇到的問題。

    5、 提供一整年的售後服務,一起搞副業

    星球福利:

    1、加入星球4天後,就送ChatGPT獨立帳號。

    2、邀請你加入ChatGPT會員交流群。

    3、贈送一份完整的ChatGPT手冊和66個ChatGPT副業賺錢手冊。

    其它福利還在籌劃中... 不過,我給你大家保證,加入星球後,收獲的價值會遠遠大於今天加入的門票費用 !

    本星球第一期原價 399 ,目前屬於試營運,早鳥價 169 ,每超過50人漲價10元,星球馬上要來一波大的漲價,如果你還在猶豫,可能最後就要以 更高價格加入了 。。

    早就是優勢。建議大家盡早以便宜的價格加入!

    歡迎有需要的同學試試,如果本文對您有幫助,也請幫忙點個 贊 + 在看 啦!❤️

    在 還有更多優質計畫系統學習資源,歡迎分享給其他同學吧!

    你還有什 麽想要補充的嗎?

    免責聲明:本文內容來源於網路,文章版權歸原作者所有,意在傳播相關技術知識&行業趨勢,供大家學習交流,若涉及作品版權問題,請聯系刪除或授權事宜。

    技術君個人微信

    添加技術君個人微信即送一份驚喜大禮包

    → 技術資料共享

    → 技術交流社群

    --END--

    往日熱文:

    Python程式設計師深度學習的「四大名著」:

    這四本書著實很不錯!我們都知道現在機器學習、深度學習的資料太多了,面對海量資源,往往陷入到「無從下手」的困惑出境。而且並非所有的書籍都是優質資源,浪費大量的時間是得不償失的。給大家推薦這幾本好書並做簡單介紹。

    獲得方式:

    1.掃碼關註本公眾號

    2.後台回復關鍵詞:名著

    ▲長按掃描關註,回復名著即可獲取