GitHub 上有什麼值得學習,簡單的,易讀的 Python 項目?

本人是大二的學生,平時無聊用Python給Mac寫了一個小的天氣預報的項目, 發到了github上了,https://github.com/jamesxu182/MyWeather 。
非常好奇大型軟體是怎麼開發的,複雜的UI是如何設計的。
敢問大神github上有哪些簡單的,適合我這個水平的Python項目。


推薦閱讀我的專欄文章 教你閱讀Python開源項目代碼 - Python之美 - 知乎專欄。我摘錄其中一部分:


我個人的喜好

和工作中看別人代碼差不多,基本每個人、每個項目、每個團隊都有自己寫代碼的風格,比如變數命名風格、某些語言特性使用方式、代碼規範要求、目錄風格等,其實開源項目的作者也是一樣。看代碼,如看人(團隊)。 首先介紹下我的喜好(排名分先後):

1. kennethreitz。requests和python-guide作者。他還有一個非常勵志的故事,有興趣的可以看 誰說程序員不是潛力股?

2. mitsuhiko。flask、Jinja2、werkzeug和flask-sqlalchemy作者。

3. sigmavirus24。flake8、pycodestyle(原pep8)、requests、urllib3等項目的主要貢獻者和維護者。

4. ask。Celery及相關依賴的作者。

5. ajdavis。mongo-python-driver(pymongo)、tornado等項目的主要貢獻者。

6. bitprophet。fabric、paramiko(Python的ssh庫)作者。

前2個是公認的Python領域代碼寫的最好的、最有創意的工程師。

初學者推薦閱讀項目

初學者可以先閱讀一些代碼量比較少的,最好是單文件的項目:

1. GitHub - kennethreitz/pip-pop: Tools for managing requirements files.

2. GitHub - kennethreitz/envoy: Python Subprocesses for Humans?.

3. GitHub - kennethreitz/records: SQL for Humans?

4. GitHub - mitsuhiko/pluginbase: A simple but flexible plugin system for Python.

5. GitHub - mitsuhiko/pipsi: pip script installer

6. GitHub - mitsuhiko/unp: Unpacks things.

7. GitHub - chrisallenlane/cheat

8. GitHub - jek/blinker: A fast Python in-process signal/event dispatching system.

9. GitHub - mitsuhiko/platter: A useful helper for wheel deployments.

10. GitHub - kennethreitz/tablib: Python Module for Tabular Datasets in XLS, CSV, JSON, YAML, amp;amp;amp;c.

看代碼主要是了解別人寫代碼的方式,語法實踐這些內容。看完之後,你可以針對這些項目能解決的問題自己寫個項目,寫完之後和上述項目去對比一下,看看哪些方面做的不好。

進階閱讀項目

進階的時候就要閱讀一些相對複雜的項目,它們能幫助你提升Python編程技巧:

1. faif/python-patterns。使用Python實現一些設計模式的例子。

2. pallets/werkzeug。flask的WSGI工具集。其中包含了實現非常好的LocalProxy、cached_property、import_string、find_modules、TypeConversionDict等。

3. bottlepy/bottle。閱讀一個Web框架對Web開發就會有更深刻的理解,flask太大,bottle就4k多行,當然如果你有毅力和興趣直接看flask是最好了的。

4. msiemens/tinydb。了解用Python實現資料庫。

5. coleifer/peewee。了解ORM的實現。

6. pallets/click。click已經內置於在flask 0.11里,提供命令行功能,值得閱讀。

7. mitsuhiko/flask-sqlalchemy。了解一個flask插件是怎麼實現的。

除此之外Web開發者可以閱讀一些相關的項目:

1. runscope/httpbin。使用flask,網站是httpbin(1): HTTP Client Testing Service。

2. jahaja/psdash。使用flask和psutils的獲取Linux系統信息的面板應用。

3. pallets/flask-website。 flask官方網站應用。

4. pypa/warehouse。如果你使用pyramid,這個新版的PYPI網站,可以幫助你理解很多。

當然,2個學習flask重要的資源必須爆一爆:

1. GitHub - realpython/discover-flask: Full Stack Web Development with Flask。

2. The Flask Mega-Tutorial。 這個就是《Flask Web開發:基於Python的Web應用開發實戰》的原始博客。

500lines

推薦一個非常厲害的項目 GitHub - aosabook/500lines: 500 Lines or Less, 它裡面包含了22個由該領域的專家完成,用不到500行的代碼實現一個特定功能的子項目。連Guido van Rossum都親自來寫基於asyncio爬蟲了,Nick Coghlan、ajdavis也出場了。更具體的介紹可以看Python 的練手項目有哪些值得推薦? - 小小搬運工的回答

歡迎關注本人的微信公眾號獲取更多Python相關的內容(也可以直接搜索「Python之美」):

http://weixin.qq.com/r/D0zH35LE_s_Frda89xkd (二維碼自動識別)


不要臉推薦自己 +1

--------------------------------

我 Python 也用了挺久了……但是都是些小腳本,放到 Github 上的也就三四個……

滿足答主「值得學習」這個目標的我感覺只有這個勉強達標:

GitHub - 7sDream/zhihu-oauth: 嘗試解析出知乎官方未開放的 OAuth2 介面,並提供優雅的使用方式,作為 zhihu-py3 項目的替代者,目前還在實驗階段

因為這個庫是我寫的比較認真的一個項目,注釋,文檔和代碼都比較完善。

這是個和網路,OAuth,知乎,JSON,ORM有關的一個項目。比較多的用到了裝飾器呀,importlib 呀之類的一些稍微超過入門級的東西,結構設計也比較合理,算是值得已經入門的同學一看吧,當然 Python 精通者會覺得很平常的,我現在也覺得除了寫的比較規範之外並沒有什麼太大亮點。

附上一張某位同學看完代碼之後非常過譽的評價:

雖然我還沒工作過,不知道啥叫「工業級別的水準」,但是這應該是在誇我沒錯吧 OvO

--------------------------------

然後還有一些其他的:
GitHub - 7sDream/kd100: I"m a small script that help you get express package information use http://kuaidi100.com api.

這個東西是個查快遞的……

想學學 Python 自帶的 urllib 的網路請求和 argparse 的應該可以簡單看看。還有如何把自己的代碼打包成一個直接能用的 CLI。

我也不知道為什麼要寫個這個,明明現在網站上都可以直接看的好么……

--------------------------------

GitHub - 7sDream/zhihu-py3: Zhihu UNOFFICIAL API library in python3, with help of bs4, lxml, requests and html2text.

上面這個雖然是我 Gtihub 上 Star 最多的一個 Lib,但是比較不值得看。

除非你想學習以下內容:

  • requests session cookies 的例子
  • BeautifulSoup4 的例子
  • 如何用 Class 把凌亂的數據組織起來
  • 如何盡量減少不必要的網路請求

我已經想把這個項目列為我的黑歷史了,因為是大一大二剛學 Python 的時候亂寫的。雖然功能比較多,代碼量也挺大,但根本沒有什麼代碼之美,Python 之禪(其實還是有一點的,比如 Client 以及 Activity 類,但是雜亂佔比比較多),什麼 DRY 原則也被我踐踏到不知道哪裡去了 =,=

要不是還有些人在用,我已經想刪 repo 了……真的,我算是體會到了什麼叫做自己都不願再看自己寫的代碼……(但我還在非常緩慢的保持著它更新 =,=

--------------------------------

GitHub - 7sDream/pyqart: QArt Python Implementation.

這個倒是可以看……可是不容易看懂。建議只看 qr 部分,這是一個沒有任何依賴的純 Python 寫的二維碼編碼器。

連 PIL 都不是必須依賴,因為可以直接輸出到終端而不是圖片:

I"m a QrCode in version 6, 90 deg rotation, ec level 3 (二維碼自動識別)


知乎愚蠢的二維碼自動識別又把我的截圖給識別沒了,放鏈接好了:http://rikka-10066868.image.myqcloud.com/397a842e-25c7-4dc4-ab27-9ad842a61d90.png

當然如果想輸出圖片的話 PIL(pillow)這個依賴還是要的。

如果真的想自己動手寫一個的話,建議和二維碼的 IOS 標準一起看:http://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf

如果能看完,並且想看 art 部分,需要跟著論文一起看:http://research.swtch.com/qart

--------------------------------

GitHub - 7sDream/qqqfome: Thank-you-follow-me Ha Ha Ha!

一個給知乎里的新關注者自動發私信的項目,效果是大概這樣:謝謝你關注我呀!!! - 科學の禁書目錄 - 知乎專欄

但是我已經關了它好久了,也就部署過一下下時間,不知道還有用沒有。

裡面有個 unix double fork 把自己變成 daemon 的方法值得看看。

可能還有一些 sqlite 和 logging 模塊的用法吧,當個例子也可以。

我計劃著用 oauth 替代 py3 把它重寫, 然後 build 成一個 docker image 方便以後使用~

不過應該不是近期的計劃。

--------------------------------

GitHub - 7sDream/0v0.link-blog: Blog, powered by django, sqlite, apache.

啊,我的博客:7sDream Blog

用的 Django …… 然而至今沒寫完……所以博客里也只有一個關於我……

作為一個不喜歡寫博客的,基本不懂前端的人,完全沒用動力把它寫完……心塞中

不過如果你對 Django 感興趣,也許也能當個例子什麼的。

--------------------------------

沒了,這會真沒了……還有一些一次性或者沒什麼大用處的東西我都沒放 Github……

--------------------------------

最近跑去學 Golang 去了……Python 好久沒寫了……懷念ing

另外,大家說的沒錯,requests 真的很值得一讀:GitHub - kennethreitz/requests: Python HTTP Requests for Humans?


爬了一下GitHub上所有使用Python語言寫成的項目,統計出了排行前五十的高星案例。其中不乏flask、Django、thefuck等知乎著名項目。

這些項目可能閱讀起來並不是十分簡單易讀,但是毫無疑問有極強的學習價值。非常適合一個人完成技能水平的飛躍。(有些項目是資源匯總,內含大量資源)

另外拋一個觀點:學習的第一選擇是價值,而不是簡單易讀,本身Python語言就簡單,靜下心來好好讀就是了,別怕代碼長,寫長代碼比讀長代碼簡單。

1.vinta/awesome-python

簡介:A curated list of awesome Python frameworks, libraries, software and resources

星星:36k

2.jakubroztocil/httpie

簡介:Modern command line HTTP client – user-friendly curl alternative with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc.

星星:30k

3.nvbn/thefuck

簡介:Magnificent app which corrects your previous console command.

星星:29k

4.pallets/flask

簡介:A microframework based on Werkzeug, Jinja2 and good intentions

星星:28k

5.django/django

簡介:The Web framework for perfectionists with deadlines.

星星:26k

6.requests/requests

簡介:Python HTTP Requests for Humans?

星星:26k

7.ansible/ansible

簡介:Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.

星星:24k

8.scrapy/scrapy

簡介:Scrapy, a fast high-level web crawling scraping framework for Python.

星星:21k

9.scikit-learn/scikit-learn

簡介:scikit-learn: machine learning in Python

星星:19k

10.certbot/certbot

簡介:Certbot, previously the Let"s Encrypt Client, is EFF"s tool to obtain certs from Let"s Encrypt, and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.

星星:19k

11.donnemartin/system-design-primer

簡介:Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

星星:18k

12.fchollet/keras

簡介:Deep Learning library for Python. Runs on TensorFlow, Theano, or CNTK.

星星:17k

13.tornadoweb/tornado

簡介:Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

星星:13k

14.reddit/reddit

簡介:the code that powers http://reddit.com

星星:13k

15.faif/python-patterns

簡介:A collection of design patterns/idioms in Python

星星:11k

16.ipython/ipython

簡介:Official repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.

星星:11k

17.python/cpython

簡介:The Python programming language

星星:11k

18.donnemartin/interactive-coding-challenges

簡介:Huge update! Interactive Python coding interview challenges (algorithms and data structures). Includes Anki flashcards.

星星:10k

19.pandas-dev/pandas

簡介:Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more

星星:10k

20.docker/compose

簡介:Define and run multi-container applications with Docker

星星:10k

21.donnemartin/data-science-ipython-notebooks

簡介:Recently updated with 50 new notebooks! Data science Python notebooks: Deep learning (TensorFlow, Theano, Caffe, Keras), scikit-learn, Kaggle, big data (Spark, Hadoop MapReduce, HDFS), matplotlib, pandas, NumPy, SciPy, Python essentials, AWS, and various command lines.

星星:9k

22.binux/pyspider

簡介:A Powerful Spider(Web Crawler) System in Python.

星星:9k

23.sqlmapproject/sqlmap

簡介:Automatic SQL injection and database takeover tool

星星:9k

24.fabric/fabric

簡介:Simple, Pythonic remote execution and deployment.

星星:8k

25.keon/algorithms

簡介:Minimal examples of data structures and algorithms in Python

星星:8k

未完待續,後續會補充所剩25各項目並逐步修改簡介為中文...


你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Python自動化全能開發從入門到精通》筆記全放送


bottle

這是每個想學習Web框架原理的人都值得研究的一個框架,Bottle是一個輕量級的、實現了WSGI協議的微型框架,去掉注釋不到千行代碼,不依賴任何第三方框架,所以學習起來沒那麼吃力,麻雀雖小五臟俱全。相比之下,如果你要去讀Django或者Flask的源碼你會覺得無從下手。

requests

在沒有requests前,網路請求庫可以使用內置模塊urllib,而 Rquests 把Python之禪的哲學發揮到了極致,推薦一讀

而對於大項目,你不一定能全讀懂,畢竟一個大項目是由很多人很年多堆砌而成的,正確的做法是點進去讀裡面的某些模塊,看看人家那些地道的寫法。


lilydjwg/nvchecker

小巧,簡單易懂,模塊化,實現完整,非同步高效,包含全面的測試。是個正式的項目,間接服務於所有 Arch Linux 用戶。

利益相關:這是我的項目。喜歡請給小星星~


Django


Ultimaker 3D印表機的上位機軟體Cura的UI是Python寫的,用的Wxpython。當然,引擎是C++寫的。我個人覺得挺有趣的。軟體規模適中,功能完整,包含了跨平台配置的知識,和C++引擎通信的知識,OpenGL等。涉及一些3D列印方面的專業知識但是並不複雜,重點還是在UI和功能設計
daid/Cura · GitHub


googler,一個命令行界面使用谷歌搜索的小程序。實用的價值不大,特殊情況有點用例如批量比對各個國家搜索結果異同之類的。功能比較簡單,代碼易讀,有學習的參考價值。

https://github.com/jarun/googler


不要臉的推薦自己:

https://github.com/libraries/prettylist

這是一個沒有使用任何依賴(包括標準庫),純字元串操作的 text table 實現。

代碼簡潔易讀,注釋清晰,是我寫了幾年 py 後, 理解 python 之美後的頓悟之作.


我推薦requests,可以學習Python代碼和注釋的風格


shadowsocks就不錯啊,好像作者去知乎了


單文件,第三方的豆瓣 FM 播放器。你可以學到如何使用 requests 進行模擬登陸和進行數據請求。可以學到如何使用 urwid 構建命令行 UI。

更重要的是,用來聽聽歌也還不錯~
項目地址:GitHub - nekocode/doubanfm-py: 第三方豆瓣 FM 紅心頻道播放器。哦,還有個項目 GitHub - nekocode/zhihuSayHi: Say Hi to your new followers in Zhihu. 感興趣的話可以嘗試對我的知乎帳號點下關注(不是騙關注啦~),你會收到奇奇怪怪的東西哈哈(逃


n0tr00t/Sreg · GitHub

這個,可以查看指定Email或手機號碼或用戶名都註冊過哪些網站。
也就200行左右哦。
還可以擴展網站註冊查詢插件


一看嚇一跳,原來那些個聽都沒聽過的網站我都註冊過?


gleitz/howdoi · GitHub
一個很有趣的命令行小工具,代碼不多,寫的非常 Pythonic。

再推薦幾個適合閱讀的好項目,不過可能比較大,要花點功夫去讀。

  • kennethreitz/requests · GitHub
  • mitsuhiko/flask · GitHub
  • kennethreitz/tablib · GitHub
  • mitsuhiko/werkzeug · GitHub

tornado算么。


強烈推薦mininet,對於網路研究而言,了解和使用mininet網路模擬工具是必備的技能。因此,閱讀和理解mininet源碼對於了解其工作原理是十分有價值的。mininet是基於python編寫的,代碼結構清晰,簡潔易讀。

附上Github鏈接:GitHub - mininet/mininet: Emulator for rapid prototyping of Software Defined Networks


bottle.py


python可以構建大項目

http://odoo.com
(開源erp 千人以下erp王)

openstack.org
(雲os)

都足夠大 是我知道的的開源的最大的兩個python項目


具體還看想學些那方面了,也要看自身的基礎如何,同時也建議分階段來看。

不過具體的話還是依題主的情況來說好了,不然這個問題也就沒有具體的答案。


首先可以說點不想乾的話題,比如:

  • 題主的代碼倉庫里好像沒有ignore掉pyc文件...
  • 在看到題主用了bs4的同時我還看到了urllib2... https://github.com/Jamesxu182/MyWeather/blob/master/getWeathers.py#L6
  • 以及從這裡可以看出題主的前端水平似乎... https://github.com/Jamesxu182/skedody/blob/master/index.html#L32

由此似乎可見:

  • 題主git還沒玩熟 or 有點不拘小節
  • 對python的生態圈還不是很了解 or
    不屑於用requests那樣的裝逼庫
  • ... ( ╯□╰ )

然後,作為一名從web開發起步的老菜鳥,先分享下大概的學習經歷好了。


鄙人大概也是大二的時候(2012年秋)真正開始用python的,當然前面有玩flash的背景,所以對同類的腳本語言,上手還算比較習慣。比如當時的ActionScript2.0的水平大概是這樣子的(300行左右代碼):http://koalangelion.deviantart.com/art/Restend-379547522


中間的過程還是從略好了,畢竟是業餘玩家。到現在零零碎碎也有兩年了吧,現在的python水平… 還真不好說,簡單舉個粒子大概是這樣的:https://gitcafe.com/restait/buffer/tickets/22

所以回答這個問題的話,首先我覺得這些編程的東西,對於題主來說,需要學習的還有很多。。。

當然能在大二就用python寫個mac上用的小工具還知道放到github上,且不說代碼水平,至少這種意識還是挺不錯的。然而人和人之間,時代與時代之間自然是有差別,自然同為大學生,我還買不起mac,自然同為大學生,我也不能和那些初二就混IRC還發pull request的中學生相比…

所以我覺得題主可能更在意的是怎麼組織一個大型的軟體項目,以及如何造一個複雜的UI。而這些東西,其實github上面不是很多,能作為學習參考的就不多了,而使用python作為主力語言的就更少了... 原因大家懂的,至少開源出來的不是很多。


而且這裡有兩點提示:一是python不太適合用來構造一個完整的大型項目,二是python在圖形界面這邊確實還是短板。


然後有了上面這些鋪墊,感覺再推薦些好的github項目也不遲。這裡我覺得其實可以避免一個誤區,就是很多好的python項目,恰恰不在github上面,比如SQLAlchemy(bitbucket,你懂的),比如BeautifulSoup(lauchpad)。所以這兩個雖然也是適合研讀的好項目,不過因為不符合github這個約束,類似的也就不涉及了。


先說些個人覺得對自己學習python比較有益的且在github上託管的項目好了(web開發向top6,下面的條目不含http://github.com/前綴):

  • pylons/pyramid
  • kennethreitz/requests
  • defnull/bottle
  • andymccurdy/redis-py
  • douban/douban-client
  • mitsuhiko/jinja2

這些項目大多是看過源碼的,不過主要還是有文檔的看文檔。不過要說簡單的,適合題主水平的,可以看下redis-py、requests和douban-client,pyramid這種結構比較龐大的,一開始上手看源碼可能會有點吃力(依賴zope.interface的項目大多都這樣,比如twisted,scrapy)。bottle的話雖然簡單,但是沒有什麼太多實際可以借鑒的地方,畢竟把全部代碼揉在一起,在IDE還沒有智能到可以自動分頁的時代,看起來實在是太噁心了...


其他有些項目也是不錯的,不過本人畢竟沒有細看過源碼(比如shadowsocks),這裡也就不做推薦了。所以真要推薦的話,題主可以在上面的六個裡面隨機選兩個了解下。有時候上手難點也無所謂,只要不是太噁心的項目,也還是能摸透的(實不相瞞,pyramid從入門到玩轉大概有一年的時間間隔)。


而django之流,拿來用還可以,深入的話其實也是個巨坑,當然這裡我還是不黑django了...


最後留點相關提示,有時候學習一個項目,具體的代碼實現不是重點,而是如何一步步演進且維護到現在,那些最初留下來的,以及後來被捨棄掉的,這些決策,其實也可以理解為一種潛在的設計模式,而所有這些潛藏在項目之下的,才是更值得學習的地方。至於為什麼前面說六選二呢,因為單從一個項目去認知整個python世界,也是片面的,於是乎這裡就不嘲諷django和tornado了。所以進而推廣,題主要是有志於做點大項目,有空應該多了解些工業上常用的語言,參與些實戰項目攢攢經驗,畢竟單從python去了解這個編程世界也是片面的,於是乎這裡我就不黑js了。


jupiter是一個aio web框架,基於aiohttp。支jupiter持(restful格式、掃描註解、依賴注入、jinja2模板引擎、ORM框架)等。

dianbaer/jupiter

代碼很少,當然寫的也不是特別完善。很適合學慣用


推薦閱讀:

python開發一個項目要怎麼做?
Python 閉包代碼理解?
系統中同時有 python2和 python3,怎麼讓 ipython 選擇不同的版本啟動?
想用Python做一款處理上市公司財務數據的軟體,應該學習哪幾個部分?
不懂編程,如何才能學好python呢?

TAG:Python | 編程 | 計算機 | GitHub | 項目開發 |