Python 開發工具鏈全解

可能剛開始學習Python時,有人跟你說能夠將源文件所在的文件夾添加到 PYTHONPATH環境變量中,而後能夠從其餘位置導入此代碼。在大多數狀況下,這我的經常忘記補充這是一個很是糟糕的主意。有些人在互聯網上發現了這一點,其餘人卻要看本身付出代價後才意識到。還有太多人(特別是非程序員)真的相信除此外沒有別的辦法了。python

這篇文章適用於全部類型的 Python 學習者,由於即便你知道存在替代方案,也難以掌握。 Python的工具鏈使人困惑,由於有許多軟件是相互依賴的,而且它們的關注點也有不少重疊。很難理解它們在 Python 編程體系中的定位。程序員

出於這個緣由,我決定列出最重要的工具,它們的使用場景和緣由,以及它們解決了什麼問題。我將嘗試用簡單的詞語解釋你應該如何使用這些工具。若是我在本文中列出了某個工具,這意味着,做爲一個Python程序員,你應該至少知道它的存在。我將僅列出可應用於任何項目或工做流的工具,每次啓動新項目時都應考慮這些工具。這並不意味着您老是必須在每一個項目中使用它們。在某些狀況下,太多的工具很容易成爲一種負擔,而且難以維護。django

Python 開發工具鏈全解

 

Setuptools

Setuptools是在Python中建立包的標準方法。它無處不在,有效併發揮了應有的做用。編程

  • 用途:從源代碼構建egg,zip或wheel文件,爲項目定義元數據,以結構化和標準化的方式共享代碼bash

  • 場景:基本上每次你想編寫應該運行在其餘機器上的代碼時併發

  • 替代品:Poetry, Flit函數

 

virtualenv

Virtualenv是一個虛擬環境管理器。隔離的虛擬環境能夠理解爲「安裝了獨立包的Python版本。使用virtualenv意味着不須要(而且不該該)使用系統默認的python版原本安裝軟件包。工具

  • 用途:保持依賴關係分離,在同一系統中支持多個python版本,輕鬆移動依賴關係學習

  • 場景:想寫代碼時,想使用不一樣於默認版的Python版本時開發工具

  • 替代品:Docker或同等產品

 

Pip

Pip是Python最經常使用的包管理工具。它容許您獲取本地或遠程包,並將它們安裝在虛擬環境或系統的Python中。

  • 用途:安裝和卸載軟件包,跟蹤正在使用的軟件包的版本

  • 場景:任什麼時候候均可以使用

  • 替代品:詩歌,康達

 

distutils

distutils是setuptools的先驅。後者大量使用來自distutils的功能,所以不少狀況下都會用到該工具。這不是你會直接選擇使用的工具,但你應該知道它生態中的做用。

 

Pypi

Pypi是Python Package Index的簡稱。它存儲了全部你可能會用到的Python庫。Pip就是從這裏獲取構建好的包。

  • 用途:發佈代碼

  • 場景:要公開發布包時

 

Pypiserver

Pypiserver是Pypi使用的Package Index API的一個實現。您能夠用它來配置本身的代碼庫,例如爲整個公司設置並在那裏發佈包,而不是公開發布。

  • 用途:組織內部共享代碼

  • 場景:代碼不該公開,但願擁有控制權

  • 替代方案:Warehouse(Pypi使用的庫),djangopypi

 

Poetry

Poetry是也是一個包管理系統,能夠取代setuptools,pip和一些創建在它們之上的工具。這個工具,是對Python打包系統的一次全面重構嘗試。到目前爲止,它獲得了一些支持和不少積極的反饋,但它還遠遠沒有成爲主流選擇。

  • 用途:處理和分發包,管理依賴項

  • 場景有一個新項目並且不怕使用相對小衆的工具

  • 替代方案:Pipenv

 

Pipenv

Pipenv和 Poetry 同樣,是一種以更加理智的方式構建Python項目依賴關係和配置的工具。它經過 Pipfile,管理項目的依賴關係,並確保一致性和易用性。

  • 用途:處理和分發包,管理依賴關係

  • 場景:想嘗試相似 Poetry 的工具,但但願引發更少的問題

  • 替代方案:Poetry

Python 開發工具鏈全解

 

Sphinx

Sphinx是構建文檔的工具。它最初誕生的目的,是處理Python的文檔,但如今已經成爲了一個通用文檔工具。它仍然是Python項目最多見的文檔工具。

  • 用途:根據reStructuredText文件,生成PDF或HTML文檔

  • 場景:但願爲項目提供外部文檔,API和代碼

  • 替代方案:Docutils,Doxygen

 

autodoc

autodoc是Sphinx的基本擴展,容許從Python源代碼中生成restructuredText文件,其中包含每一個類,函數,模塊等的條目。

  • 用途:記錄代碼或API

  • 場景:可能每次使用Sphinx進行項目時

  • 替代方案:autosummary

 

py.test

py.test在我看來是Python中最好的測試套件。它具備不少功能,但並不是全部功能都獲得充分的推廣,所以須要一些時間來發現該軟件支持的豐富可能性

  • 用途:測試代碼

  • 場景:什麼場景下都須要用的,別犯懶

  • 替代方案:unittest,nose

 

Hypothesis

Hypothesis是基於屬性的測試工具。簡單地說,它會根據你提供的規範生成隨機測試場景,直到找到致使測試失敗的狀況。在開始使用此工具以前,請花點時間瞭解背後的原理。

  • 用途:測試代碼,尤爲是數據處理

  • 場景:須要使用各類輸入數(數字,字符串,結構化數據)測試複雜邏輯時

 

tox

tox本質上是測試工做中的虛擬環境管理器。這意味着配置測試,讓其在一系列乾淨,可自定義的虛擬環境中運行,以確保代碼可以在不一樣條件下工做。全部這些都不須要任何手動處理。

  • 用途:須要在不一樣條件和環境中運行的代碼。對CI也頗有用。

  • 場景:代碼須要支持不一樣的Python版本,在不一樣的環境和不一樣的操做系統中運行

  • 替代方案:bash scrips,CI pipeline

 

pyenv

pyenv是一個python版本管理器。它旨在簡化開發人員處理多個版本時的本地工做流程。

  • 用途:運行支持不一樣python版本的項目

  • 場景:須要使用系統python版本,可是卻安裝了不少種時

  • 替代品:手動管理,virtualenv,Poetry,Pipenv

 

PyScaffold

PyScaffold是一種以標準化方式初始化項目結構的工具,並提供咱們以前列出的一些工具,而無需手動配置它們。它支持高度定製。

  • 用途:初始化項目;有多個項目,須要統一的工具和結構

  • 場景:各類場景均可以使用(只要你熟悉工具,不要在緊急狀況下去嘗試新工具)

  • 替代方案:python-project-template,Cookiecutter

 

flake8

flake8是Python最經常使用的風格檢查工具之一。它運行不一樣的腳原本驗證代碼是否符合Python的風格指南要求(PEP-8)。

  • 用途:驗證並保證項目中良好的代碼風格

  • 當每次您的項目須要被某人閱讀時,包括您本身

  • 替代方案:pylint

 

Black

Black是一個自動代碼格式化工具。這意味着Black不會僅僅檢查您的代碼是否合規,還會實際修改它以使其符合規範。

  • 用途:自動格式化代碼

  • 場景:願意放棄手動控制代碼風格

  • 替代方案:autopep8,yapf

相關文章
相關標籤/搜索