0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

代碼行數(shù)最多的 Python 項目是什么 我猜你不知道

馬哥Linux運維 ? 來源:未知 ? 作者:steve ? 2018-05-14 11:19 ? 次閱讀

總是看到有人說,動態(tài)一時爽,重構(gòu)火葬場。

然而這世界上有的是著名的開源項目,也有像 Github、Instagram 這樣流量巨大的知名網(wǎng)站是基于動態(tài)語言開發(fā)的,經(jīng)過了這么多年重構(gòu),也未聽說哪個作者進了火葬場的,不明白這些人是真的不知道還是裝作看不見呢?不過他們說動態(tài)語言大到一定程度就無法維護,雖然這話也同樣不值一駁,不過也提醒了我,我也很好奇用動態(tài)語言開發(fā)的項目規(guī)模能大到什么程度。

從我知道的信息看,用動態(tài)語言開發(fā)的最大規(guī)模的項目可能要算是OpenStack,據(jù)說代碼總量已經(jīng)達到數(shù)百萬行,并且還在持續(xù)增加中。這當(dāng)然是一個說明動態(tài)語言能力的好例子。不過像這樣巨大的項目,要分析起來也并不容易(好吧,真正的原因是我懶得下載那么龐大的代碼庫)。我選擇了 Python 社區(qū)中比較知名的一些項目來分析,主要是來自 Github ,也有個別來自其他倉庫。這個選擇可能包含了一定的主觀因素在內(nèi),不過我相信大多數(shù)項目還是非常有代表性的。

計算代碼數(shù)量的工具是cloc。所有項目均選擇截止到 2018 年 1 月 3 日的主干代碼,統(tǒng)計中僅包含 Python 文件,排除了其他文件類型。值得說明的一點是, 通過 Ubuntu APT 默認(rèn)安裝的 cloc 版本 1.60 在統(tǒng)計部分項目的時候存在問題,該問題在最新的版本中已經(jīng)得到解決,因此本文中所有統(tǒng)計均使用從官網(wǎng)下載的 cloc v1.72。

代碼行數(shù)最多的 Python 項目是什么  我猜你不知道

上表已經(jīng)按代碼行數(shù)排了序。有意思的一點是, 代碼規(guī)模最大的前4名中除了 CPython 之外其他三個全部是運維性質(zhì)的項目,本來我猜測代碼應(yīng)該比較多的項目比如 Odoo 排名反而很靠后。我對運維項目了解有限,不太清楚為什么這些項目的代碼規(guī)模會名列前茅,或許是因為要支持的內(nèi)容比較多而雜?

代碼行數(shù)最多的 Python 項目是什么  我猜你不知道

本次統(tǒng)計中純 Python 代碼量最大的 Sentry 幾乎達到了 70W 行,這是相當(dāng)有規(guī)模的項目了。30W~50W 行代碼的項目有三個,包括基礎(chǔ)項目 CPython 在內(nèi)。20W 和 10W 行代碼規(guī)模的分別有三個,剩下 7 個則在 10W 行以內(nèi)??催^這個列表你應(yīng)當(dāng)相信,動態(tài)語言至少在幾十W行代碼的項目上是完全沒有問題的。這也是絕大多數(shù)普通應(yīng)用的上限了,如果代碼真的達到數(shù)百萬行規(guī)模的話,那么無論用什么語言,都勢必面臨著拆分項目的問題。

上表將代碼量指標(biāo)按照代碼/空白/注釋進行了分類,也在一定程度上反應(yīng)了項目的代碼風(fēng)格。Sentry 是本次統(tǒng)計中代碼量最多的項目,然而從表中可以看到,項目中的注釋和其他項目相比,少得有點不成比例,說明 Sentry 的作者非常不注重注釋。

同學(xué)們一定發(fā)現(xiàn)了,我在列表中除了代碼行相關(guān)的指標(biāo)之外還增加了幾個其他內(nèi)容,這也是我個人比較感興趣的方面。

代碼行數(shù)最多的 Python 項目是什么  我猜你不知道

第一個指標(biāo)是每個文件的平均代碼行數(shù)。按照模塊化的觀點,單個文件中堆砌太多內(nèi)容顯然是不合理的,這通常意味著耦合太多、難于理解和修改。然而到底多少算是合適,并沒有一個明確的標(biāo)準(zhǔn)。我希望通過這些項目的分析,了解一下開源作者們在實踐中做出的選擇。

統(tǒng)計的結(jié)果分布比較平均,從 100~600行/文件的都存在,并不存在明顯的集中點。有趣的是,頭兩名(Pandas, NumPy)有著緊密的聯(lián)系,都是和數(shù)學(xué)統(tǒng)計相關(guān)的。這可能是因為數(shù)學(xué)庫的特點比較純粹而單一,不像其他類庫那樣容易劃分。末尾的項目(Pillow, youtube-dl, Odoo, Scrapy)可以從側(cè)面印證這種猜想:它們都是面向特定領(lǐng)域的,所以更加容易模塊化。

代碼行數(shù)最多的 Python 項目是什么  我猜你不知道

第二個指標(biāo)是注釋和代碼的比例,這個問題也有著類似的情況。注釋并非越詳盡越好,但總是需要一定量的注釋來解釋 Why 的問題。注釋太少,說明項目的作者沒有給后來的維護人員留下足夠的線索,可能會造成維護上的問題。另一方面,我們考察的全部是開源項目,沒有公司考核或者 KPI 的約束,所以我們可以放心的相信不會存在作者故意多寫注釋的問題。前面提到的 Sentry 毫無爭議的因為注釋太少排到了最后,這未必說明這個項目很差,但至少是一個信號,說明該項目在維護方面可能是存在問題的。而對于那些作者愿意投入精力來寫注釋的項目(Ansible, NumPy, Fabric, Salt 等),足以反映作者在項目上投入了相當(dāng)大的心力,這是一個好的信號,說明這些項目是值得信賴的。

有一點是出乎我意料的,那就是作為所有項目之母的 CPython 排名比較靠后,按照道理這個基礎(chǔ)項目應(yīng)該有更多的注釋才對。不過再想一想又覺得可以理解,因為 CPython 有單獨發(fā)布的、非常詳盡的文檔,這是其他大多數(shù)項目都沒有的,那么代碼中的注釋少一些也是情有可原的。

代碼行數(shù)最多的 Python 項目是什么  我猜你不知道

最后一項統(tǒng)計是關(guān)于文件類型的。Python 項目中絕大多數(shù)應(yīng)該是 Python 代碼,這點沒有什么疑問,但同時我也想看看除了 Python 代碼之外,一個項目還包括哪些主要文件。C/HTML/Javascipt 的上榜是毫不意外的,但有一種文件我事先沒有想到,那就是 .PO(開源項目常用的語言資源文件)。對于 Django 和 Django-CMS 這兩個項目, PO 代碼數(shù)量甚至比 Python 代碼還要多。

大概看了一下,Django 支持 90 種以上的語言,這也無怪乎語言文件的數(shù)量如此之多了。這個結(jié)果也可以提醒我們,有些同學(xué)——不僅是程序員,也包括大多數(shù)經(jīng)驗不足的老板、客戶、產(chǎn)品經(jīng)理等——會下意識的認(rèn)為程序開發(fā)無非是寫代碼,對于代碼之外的其他工作,在估算的時候往往只拍腦袋式的定下一個極短的時間。但對于實際的項目來說,代碼僅僅是其中的一部分,"其他工作"有時候——應(yīng)該說是經(jīng)常——會占用你大部分的的時間和精力。

這些工作往往并不有趣,但對于項目來說又是必不可少的組成部分,希望同學(xué)們予以足夠的重視。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4791

    瀏覽量

    68693
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84755

原文標(biāo)題:代碼行數(shù)最多的 Python 項目是?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    尼瑪,是個妹紙不知道{:5:}{:5:} 要舉報

    `尼瑪,是個妹紙不知道……{:5:}{:5:} 要舉報他`
    發(fā)表于 12-07 09:45

    不知道電動車電池的型號怎么辦?

    不知道電動車電池的型號怎么辦?  近一年來給很多人換過電動車電池了,發(fā)現(xiàn)大多數(shù)人都不知道自己的電動車電池是什么型號的,
    發(fā)表于 11-11 08:56 ?3449次閱讀

    Miniplayer小技巧 保證有不知道

    Miniplayer小技巧 保證有不知道的 1,用電源充電完成后先別拔充電器,先按住開關(guān)別放再拔開線就不用更新歌曲庫了。
    發(fā)表于 02-01 16:38 ?692次閱讀

    玩轉(zhuǎn)iPhone:可能不知道的iPhone實用技巧

    玩轉(zhuǎn)iPhone:可能不知道的iPhone實用技巧 玩iPhone有段時間了吧,怎么才能讓iPhone更順手呢?在這里可以看到一些最新的iPhone小技巧
    發(fā)表于 04-07 09:22 ?307次閱讀

    絕對有不知道的iOS自身小技巧!

    ?iOS本身就是一個很流暢,很人性化的系統(tǒng),但是功能多,一般使用的人有些功能并不知道如何使用。小編找了幾點小iOS自身的使用小技巧分享給大家。
    發(fā)表于 12-19 13:42 ?573次閱讀

    vivox9Plus彭于晏男神都夸贊的8大絕招,不知道就out了!

    vivox9Plus彭于晏男神都夸贊的8大絕招,不知道就out了。
    發(fā)表于 01-18 12:59 ?1583次閱讀

    不知道的 Vivo X9玩機小技巧!磨砂黑版會買嗎?

    Vivo x9新配色,磨砂黑版現(xiàn)已在火熱預(yù)訂中,不知道購置x9的小伙伴對手機的體驗怎么樣?
    發(fā)表于 03-11 10:19 ?3127次閱讀
    <b class='flag-5'>你</b><b class='flag-5'>不知道</b>的 Vivo X9玩機小技巧!磨砂黑版<b class='flag-5'>你</b>會買嗎?

    低功耗藍牙不知道怎么選型?看這里!

    低功耗藍牙不知道怎么選型?看這里!
    發(fā)表于 07-27 16:46 ?12次下載

    到底知不知道硬件設(shè)計是什么?

    想學(xué)習(xí)硬件電路方面的設(shè)計,但不知道怎么入手? 懵懵懂的進入硬件領(lǐng)域,對自己的發(fā)展和方向很迷茫? 做了一段時間硬件設(shè)計,事業(yè)發(fā)展和薪資遭遇瓶頸? 有時候必須承認(rèn),還不夠優(yōu)秀!甚至不知道
    的頭像 發(fā)表于 05-18 11:27 ?9752次閱讀

    關(guān)于可能不知道的printf

    可能不知道的printf
    的頭像 發(fā)表于 02-05 12:28 ?2648次閱讀
    關(guān)于<b class='flag-5'>你</b>可能<b class='flag-5'>不知道</b>的printf

    如何將ADC代碼轉(zhuǎn)換為電壓?不知道就先看看這篇資料下載

    電子發(fā)燒友網(wǎng)為提供如何將ADC代碼轉(zhuǎn)換為電壓?不知道就先看看這篇資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計、用戶指南、解決方案等資料
    發(fā)表于 04-11 08:48 ?48次下載
    如何將ADC<b class='flag-5'>代碼</b>轉(zhuǎn)換為電壓?<b class='flag-5'>不知道</b>就先看看這篇資料下載

    如果不知道斜拉鏈機頭輪軸磨損怎么修,請看這里

    如果不知道斜拉鏈機頭輪軸磨損怎么修,請看這里
    發(fā)表于 06-16 14:55 ?1次下載

    不知道的FPC,它的發(fā)展史竟然是這樣的!

    不知道的FPC,它的發(fā)展史竟然是這樣的!
    的頭像 發(fā)表于 11-15 10:48 ?1359次閱讀

    揭秘pcb是什么物質(zhì):不知道的“化學(xué)戰(zhàn)士”

    揭秘pcb是什么物質(zhì):不知道的“化學(xué)戰(zhàn)士”
    的頭像 發(fā)表于 12-14 10:27 ?1077次閱讀

    輥壓機軸承位磨損修復(fù)不知道的那些事

    電子發(fā)燒友網(wǎng)站提供《輥壓機軸承位磨損修復(fù)不知道的那些事.docx》資料免費下載
    發(fā)表于 03-12 15:10 ?0次下載