學寫PEP,參與Python語言的設計

若是你爲Python寫了一篇PEP,這篇PEP成功的被Python指導委員會接受了,那麼之後你在吹牛皮的時候你就能夠說我主導了Python語言某個特性的設計工做.html

-- 跬蟒

我就問你主導Python語言特性設計牛不牛皮,今天我就寫一篇文章告訴你們如何去爲Python設計一篇PEP,而且整個PEP從一個想法到Python語言去實現它的這一套流程:python

假設你已是一個Python高手了,在使用Python給過程當中你以爲Python語言在某方面還不夠完善,你有一個不錯的想法能夠去改善Python這方面的不足,你打算把你的想法加入到Python語言裏面,因此你打算寫一篇PEP,爲Python的發展獻言建策,那首先須要作什麼呢?git

  1. 首先你要確保你的想法是個新的想法是個比較大的想法,是一個由必要去創建一個PEP的想法,也許你發現了Python的一些小問題,可是這些小問題若是提交一個小補丁就能夠解決了,那就不必提PEP
  2. 當你肯定本身的想法很牛B以後,你也不是立刻就要提PEP,你首先要作的事情是引起社區的討論,看看其餘人怎麼看,而後本身去實現一下這個想法看是不是可行的,而且發帖到 python-list@python.org mailing list或者到 python-ideas@python.org mailing list 進行進一步的肯定,看看你們對你的想法是否定同,若是你能讓大多數人都認同,那你就有戲,在你發帖以前最好準備一份高質量的PEP草稿,這樣的話纔會更容易的被接受
  3. 總之就是先討論,獲得你們的承認,避免後期沒必要要的撕逼,然受本身也要作好準備,最好有個簡單的實現,而後還有個高質量的PEP草稿

寫PEP你不得不知道的幾個Python社區角色

PEP champion : PEP擁護者 也就是PEP的發起人,也就是跟你們說我有個很是XXX的想法的人github

PEP author: PEP做者 就是寫PEP的人,PEP從一個想法到一篇PEP草稿,再到一篇擁有官方PEP編號的PEP文檔,到後面PEP審覈經過,PEP複審出現改動,PEP被接受這個過程當中維護PEP文檔的人就是PEP的做者,大部分PEP做者就是PEP擁護者本人微信

PEP reviewer: 這個角色不是單指某一我的,一個PEP從想法到實現須要通過不少此review, 每一次參與review的人均可以被稱做 PEP revieweride

PEP editor: PEP編輯者 就是對PEP進行初步審覈的人,審覈經過的PEP進入到github上面的PEP倉庫的master分支,進行下一輪的評審this

Python Core Developers: Python核心開發人員 就是開發Cpython解釋器的那羣人,都是大佬,都是大佬編碼

Python's Steering Council: Python指導委員會 大佬中的大佬,從Python核心開發人員中選擇出來的指導Python語言開發工做的一羣人,對於PEP是否接受有着最終發言權idea

PEP的工做流程是這樣的:設計

  1. PEP champion 先有一個高質量的idear(通過討論分析和理性驗證)
  2. 你去github上面去fork PEP倉庫
  3. 在倉庫中建立一個 pep-9999.rst的文件去把你的PEP草稿粘貼進去
  4. 肯定你的PEP的類型,PEP的狀態設爲草稿,PEP頭部按照模板寫一波
  5. 把你的pep-9999.rst push到PEP倉庫
  6. 而後PEP editors 會去審覈你的提交
  7. 若是審覈經過,這個原本是草稿的PEP會拿到一個正規的PEP編號,若是沒有審覈經過那PEP editors 會打回去讓 PEP author 去修改
  8. 若是PEP審覈經過拿到了PEP編號 PEP editor 會把這個新提交的PEP合併到PEP倉庫的 master 分支
  9. 若是你的PEP的類型是Standards Track類,那你提交的PEP還會被髮送給Python-dev list 成員進行再次review, 確保你的新PEP沒有坑
  10. 有些聽起很不錯的PEP在實現的時候實際上是很是蛋疼的,沒作的時候想的挺好,真正去實現的時候才知道是否靠譜,最好的狀況時你在提交PEP的時候你手裏就已經有一個這個PEP的原型實現了,因此若是你的PEP類型是Standards Track類型那你就不只須要準備設計文檔,你還須要準備一個參考實現,以此來避免一些不切實際的想法

固然凡事都有例外,有些Python的核心開發者是不會走這個流程的由於他們自己的權限比較大,他們有直接push內容到PEP倉庫的權限,因此有時候他們會直接給本身的PEP分配一個PEP編號push進入PEP倉庫的master分支,固然這並不意味着這個PEP就被接受了,他只是繞過了PEP editor的審批而已,PEP被接受和PEP經過審批是徹底兩碼事兒,只有經過Python指導委員會的贊成,PEP計劃實現,才能叫作PEP被接受.

若是我寫的PEP沒法審覈經過被拒怎麼辦?

PEP被拒絕是很正常的事情,不要灰心,只要可以堅信本身的PEP是真正對Python有用的東西,真正好的idear,修改一下繼續上就好了,可是被拒確定是有緣由的,最主要的緣由就是下面幾條:

  1. 該特性已經存在了
  2. 技術上不合理
  3. Python不須要去實現這樣的特性,也就是說僞需求
  4. 沒法進行後向兼容
  5. 不符合Python的設計哲學(Python設計哲學能夠在Python交互解釋器中輸入import this獲取)其實在PEP的審批階段能夠拿着本身的PEP idear去諮詢Python指導委員會,由於PEP最終會不會被接受實際上是由Python指導委員會所決定的,因此若是真的想要本身的PEP被接受,作好提早的溝通仍是很是有必要的
  6. 奧對了還有一個蛋疼的要求,就是你的PEP草稿必須帶着至少一名Python核心開發人員一塊兒寫,或者有一個Python核心開發人員指導你寫,或者有一個通過Python指導委員會批准的非Python核心開發人員一塊兒寫,反正就是須要有一個可以被Python指導委員會所信任的人蔘與了你的PEP設計,若是沒能知足這個條件 PEP editor有權直接駁回你的PEP草稿

PEP的複審和決定機制

一篇PEP是否最終被接受而且決定去實現是須要通過層層複審的,反正要通過很麻煩了一個流程,下面有個Python官方畫的簡單流程圖:

可是實際狀況比較複雜,有時候不會按照這個流程圖來,可是這個流程圖給人們提供了一個比較清晰的PEP工做流的概覽

PEP格式和模板

這年頭寫啥文檔沒個模板真不行,PEP也是文檔,因此模板搞起來:

  1. 首先PEP是UTF-8編碼的rst文件,首先你須要去指導rst文件的格式,若是rst的語法格式你已經會了,那你就能夠閱讀官方的PEP 12--Sample reStructuredText PEP Template,沒錯PEP12是介紹rst格式PEP模板的PEP(有點繞),爲何要用rst格式?官方給出的解釋是 容易轉成html進行在線發佈和閱讀
  2. 每一篇PEP必須有一個標準的PEP頭部,以下所示,帶* 號是可寫可不寫的,不帶* 號的是必需要寫的,記住寫PEP頭的時候,頭的各個字段的順序,必須按照下圖的內容去寫,前後順序不能亂

寫道這裏就講的差很少了,可是其實PEP的書寫還有不少的內容好比:

  1. 如何判斷PEP是否是一個成功的PEP
  2. PEP提交以後發現內容有bug怎麼解決
  3. PEP全部權以及全部權轉移問題
  4. PEP editor的詳細職責和工做流
  5. 等等問題,我就不寫了,寫不動了.....

想寫PEP的能夠先根據上面流程走一波,
而後等到遇到問題的時候再去查資料吧.

若是感受本篇內容還不錯,微信的朋友請點個在看,其餘平臺的朋友能夠(近距離)掃描下方的二維碼關注個人公衆號 早睡蟒更多優質原創無廣告內容等你來看.

相關文章
相關標籤/搜索