日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境

系統(tǒng) 1802 0

在程序開發(fā)時候一套好的開發(fā)環(huán)境和工具棧,可以幫我們極大的提高開發(fā)的效率,避免把大量時間浪費在周邊瑣事上。

本文以Python的為例,教大家如何快速打造優(yōu)秀的Python的項目開發(fā)環(huán)境:內(nèi)容涵蓋了模塊依賴管理,代碼風(fēng)格管理,調(diào)試測試管理和Git版本管理,使用git hook做項目規(guī)范檢查等。

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第1張圖片

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第2張圖片

pipx

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第3張圖片

Pipx是一款跨平臺的Python環(huán)境隔離管理工具,可以在支持在Linux,Mac OS和Windows上運行.Pipx默認(rèn)在是個人用戶下建立虛擬Python環(huán)境,并以此建立實現(xiàn)完全隔離的Python運行環(huán)境。安裝pipx需要Pthon 3.6及以上版本:

            
              
                python3 -m pip? 
                
                  
                    install 
                  
                
                ?
                
                  --user pipx?
                
                
python3 -m pipx ensurepath?

              
            
          

升級Pipx使用:

            
              
                
                  
                    python3
                  
                
                 ?-m pip install -U pipx?

              
            
          

包依賴管理pipenv

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第4張圖片

Pipenv會自動為你的項目創(chuàng)建和管理虛擬環(huán)境,以pipfile文件方式方式管理項目的依賴包,支持包的安裝和卸載。和requirements.txt不同,pipfile是TOML格式,支持開發(fā)環(huán)境與正式環(huán)境,還可以使用Pipfile.lock鎖定環(huán)境版本.pipxenv的安裝可以使用pipx:

            
              
                
                  
                    pipx
                  
                
                 ?安裝pipenv?

              
            
          

有些發(fā)行版也是可以直接通過其包管理器安裝的:

比如MacOS的可以下可以使用:

            
              
                
                  
                    brew
                  
                
                 ?安裝pipenv?

              
            
          

一個pipfile的示例如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第5張圖片

Pipfile.lock的示例部分如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第6張圖片

代碼風(fēng)格

代碼格式化黑色

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第7張圖片

代碼格式的統(tǒng)一不光可以給我們一個愜意的代碼格式,而且可以避免由于開發(fā)人員之間的代碼風(fēng)格差異導(dǎo)致的溝通和協(xié)作問題。

黑就是用來格式化的Python代碼的程序。它可以自動幫我們對代碼格式進行調(diào)整和統(tǒng)一,提高代碼效率和可讀性。而且通過黑色減小代碼風(fēng)格的差異,可以極大提高團隊進行代碼審查的效率。

一個黑色格式化示例如下:

原始代碼:

            
              
                
                  
                    def 
                  
                
                ?
                
                  
                    very_important_function 
                  
                
                (template:str,* variables,file:os.PathLike,engine:str,header:bool = True,debug:bool = False):?

                
                  “”將`variables`應(yīng)用于`template`并寫入`file ` “”” 
                
                ?

                
                  
                
                 ?打開(文件,?
                
                   'W' 
                
                )?
                
                  
                
                 ?F:?
...?

              
            
          

格式化后的代碼:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第8張圖片

            
              
                
                  
                    def 
                  
                
                ?
                
                  
                    very_important_function 
                  
                
                (?
模板:str,?
*變量,?
file:os.PathLike,?
引擎:str,?
header:bool = True,?
debug:bool = False,?
):?

                
                  “” “適用`variables`到`template`并寫入`file`。” “” 
                
                ?

                
                  
                
                 ?打開(文件,?
                
                   “W” 
                
                )?
                
                  
                
                 ?F:?
...?

              
            
          

isort美化進口部分代碼

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第9張圖片

Python開發(fā)中經(jīng)常需要導(dǎo)入第三方的模塊,往往這部分代碼混亂不堪,使用isort可以則可以美化這部分的代碼.isort可以按字母表順序?qū)mport進行排序,自動分成多個部分。

我們可以使用pipenv安裝black和isort:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝黑色isort -dev?

              
            
          

isort的效果示例,可以看下面的動圖:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第10張圖片

黑色和isort同時使用時,兩者默認(rèn)配置不兼容,我們需要覆蓋isort配置,優(yōu)先以黑色的格式化為準(zhǔn)??梢酝ㄟ^setup.cfg文件并添如下配置來完成該任務(wù)。

            
              
                
                  
                    [isort] 
                  
                
                ?
multi_line_output = 
                
                  3 
                
                ?
include_trailing_comma = 
                
                  True 
                
                ?
force_grid_wrap = 
                
                  0 
                
                ?
use_parentheses = 
                
                  True 
                
                ?
line_length = 
                
                  88
                
                ?

              
            
          

flake8代碼風(fēng)格檢測

Flake8可以用來確保代碼遵循PEP8中定義的標(biāo)準(zhǔn)的Python編程約定,是Python的官方輔助代碼風(fēng)格檢測工具,lake8檢查規(guī)則靈活,支持集成額外插件(比如VIM,升華,PyCharm,VSC等都有其相關(guān)插件) ,擴展性強。

其安裝也可以使用pipenv:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝flake8 -dev?

              
            
          

flake8的使用示例如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第11張圖片

flake8 example.py的檢查結(jié)果:

flake8默認(rèn)會忽略一些約定(E,F(xiàn)),如果我們檢查所有約定:

flake8 - 選擇E,F(xiàn) example.py,結(jié)果:

和isort一樣,為了配合兼容黑色,需要在setup.cfg中額外配置:

            
              
                
                  
                    [flake8] 
                  
                
                ?
ignore ?= E203,E266,E501,W503?
 max-line-length ?=? 
                
                  88 
                
                ?
max-complexity ?=? 
                
                  18 
                
                ?
select ?= B,C,E,F(xiàn),W,T4?

              
            
          

mypy靜態(tài)類型

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第12張圖片

Mypy是Python中的可選靜態(tài)類型檢查器,可以用結(jié)合動態(tài)(或 “鴨子”)類型和靜態(tài)類型優(yōu)點其他代碼的性能。通過Mypy將Python中的動態(tài)類型便捷性和表現(xiàn)力的優(yōu)勢與靜態(tài)類型強系統(tǒng)和編譯時類型檢查相結(jié)合,并且生成原生代碼,支持通過Python VM運行,可以沒有運行時開銷的高性能運行。在Python中使用靜態(tài)類型好處有:

可以使程序更易于理解和維護;

可以幫助編譯時調(diào)試和發(fā)現(xiàn)錯誤,減少測試和調(diào)試。

可以在代碼部署到生產(chǎn)環(huán)境之前就可以找到難以捕捉的錯誤。

可以使用pipenv直接安裝Mypy:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝mypy -dev?

              
            
          

mypy動態(tài)類型和靜態(tài)類型一個示例如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第13張圖片

項目配置

默認(rèn)情況下,Mypy會遞歸檢查所有類型注釋的導(dǎo)入,這會導(dǎo)致庫不包含這些注釋時出錯。需要修改mypy配置僅檢查當(dāng)前代碼運行,并忽略沒有類型注釋的導(dǎo)入模塊。這也可以在設(shè)置。 CFG中設(shè)置:

            
              
                
                  
                    [mypy] 
                  
                
                ?
files =項目,test?
 ignore_missing_imports = 
                
                  true
                
                ?

              
            
          

代碼測試

程序開發(fā)中,除了寫代碼外,另外一個重要的部分是單元測試.Python測試方面我們要介紹的工具有pytest。

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第14張圖片

可以使用pipenv添加測試工具包及擴展:

            
              
                pipenv? 
                
                  
                    安裝
                  
                
                 ?pytest pytest-cov? 
                
                  --dev?
                
              
            
          

。Pytest框架可以讓編寫小測試變得容易,而且支持以擴展的方式提供更加復(fù)雜的功能下面是pytest網(wǎng)站的一個簡單示例:

            
              
                
                  #test_sample.py? 
                
                
                  
                    def 
                  
                
                ?
                
                  
                    inc 
                  
                
                (x)的內(nèi)容:?

                
                  
                    return
                  
                
                 ?x +? 
                
                  1 
                
                ?

                
                  
                    def 
                  
                
                ?
                
                  
                    test_answer 
                  
                
                ():?

                
                  
                    assert
                  
                
                 ?inc(
                
                  3
                
                )==? 
                
                  5
                
                ?

              
            
          

通過以下命令測試

            
              
                pipenv? 
                
                  
                    運行
                  
                
                ?pytest?

              
            
          

結(jié)果如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第15張圖片

pytest冠狀病毒是pytest的單元測試行覆蓋率的插件.pytets冠狀病毒的測試結(jié)果示例如下:

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第16張圖片

pytest還有很多的擴展插件:

pytest-cov:單元測試覆蓋率報告

pytest-django:對Django框架的單元測框架

pytest-ASYNCIO:對ASYNCIO的支持

pytest-twisted:對扭框架的單元測框架

pytest-instafail:發(fā)送錯誤時報告錯誤信息

pytest-bdd測試驅(qū)動開發(fā)工具

pytest-konira測試驅(qū)動開發(fā)工具

pytest-timeout:支持超時功能

pytest-pep8:支持PEP8檢查

pytest-flakes:結(jié)合pyflakes進行代碼檢查

更多插件可以查看github pytest-dev組織下的項目。

項目配置

項目中,所有的測試都應(yīng)該放在測試目錄中,我需要給setup.cfg添加配置:

            
              
                
                  
                    [tool:pytest] 
                  
                
                ?
testpaths = test?

              
            
          

單元覆蓋率的項目配置需要創(chuàng)建一個新文件.coveragerc返回應(yīng)用程序代碼的覆蓋率統(tǒng)計信息,配置示例如下:

            
              
                [跑]?
source =項目?
[報告]?
exclude_lines =?

                
                  
                    pragma
                  
                
                :? 
                
                  
                    沒有
                  
                
                 ?封面?
 
                
                  
                    def
                  
                
                 ?__repr__?
 
                
                  
                    如果
                  
                
                ?
                
                  
                    self
                  
                
                 \ .debug?
 
                
                  
                    引發(fā)
                  
                
                 ?AssertionError?
 
                
                  
                    引發(fā)
                  
                
                 ?NotImplementedError?
 
                
                  
                    如果為
                  
                
                ?
                
                  0
                
                :?
 
                
                  
                    if
                  
                
                 ?__name__ == .__ main__:?

              
            
          

然后再工程中運行一下命令,測試項目的覆蓋率

            
              
                pipenv? 
                
                  
                    運行
                  
                
                ?pytest --cov --cov-fail-under = 100?

              
            
          

如果程序代碼的測試覆蓋率低于100%時,就會報錯。

Git pre-commit hook規(guī)范檢查

Git hook可以讓我們在提交或推送時執(zhí)行檢查腳本,腳本可以配置對項目鏡像測試或者規(guī)范性檢查。運行腳本。我們可以配置pre-commit hook允許輕松配置這些鉤子,下面.pre-commit-config。 YAML配置示例可以幫我們自動做代碼規(guī)范化,包括isort檢查,黑檢查,flake8檢查,mypy靜態(tài)類型檢查,pytest測試,pytest冠狀病毒測試覆蓋率檢查:

            
              
                
                  repos:
                
                 ?
-? 
                
                  repo:
                
                 ?local?
 
                
                  hooks:
                
                 ?
-? 
                
                  id:
                
                 ?isort?
 
                
                  name:
                
                 ?isort?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  條目:
                
                 ?pipenv run isort?
 
                
                  類型:
                
                 ?[python]?
-? 
                
                  id:
                
                 ?黑?
 
                
                  名:
                
                 ?黑?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv運行黑色?
 
                
                  類型:
                
                 ?[python]?
-? 
                
                  id:
                
                 ?flake8?
 
                
                  name:
                
                 ?flake8?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv run flake8?
 
                
                  類型:
                
                 ?[python]?
 
                
                  exclude:
                
                 ?setup.py?
-? 
                
                  id:
                
                 ?mypy?
 
                
                  name:
                
                 ?mypy?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv run mypy?
 
                
                  types:
                
                 ?[python]?
 
                
                  pass_filenames:
                
                ?
                
                  false
                
                 ?
-? 
                
                  id:
                
                 ?pytest?
 
                
                  name:
                
                 ?pytest?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv run pytest?
 
                
                  類型:
                
                 ?[蟒蛇]?
-? 
                
                  id:
                
                 ?pytest-cov?
 
                
                  name:
                
                 ?pytest?
 
                
                  階段:
                
                 ?[push]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv run pytest --cov --cov-fail-under = 
                
                  100 
                
                ?

                
                  種類型:
                
                 ?[python]?

              
            
          

如果你需要跳過這些鉤子,你可以運行g(shù)it commit --no-verify或git push --no-verify

18.11自動創(chuàng)建項目

Python的開發(fā)必備:如何建立一個優(yōu)秀的項目工程環(huán)境_第17張圖片

上面我們提到的Python項目應(yīng)該具備的工具集和配置,可以將其作為模版.cookiecutter的模版定義范例如下:

            
              
                cookiecutter.json?
{?

                
                  “full_name”
                
                :? 
                
                  “Chongchong”
                
                ,?
 
                
                  “email”
                
                :? 
                
                  “chongchong@ijz.me”
                
                ,?
 
                
                  “project_name”
                
                :? 
                
                  “Python-Practice”
                
                ,?
 
                
                  “repo_name”
                
                :? 
                
                  “”
                
                 Python-Practice? 
                
                  “,? 
                
                
                  ”project_short_description“
                
                :? 
                
                  ”簡單的Python開發(fā)練習(xí)示例?!?
                
                ,?
 
                
                  ”release_date“
                
                :? 
                
                  ”2019-09-02“
                
                ,?
 
                
                  ”年“
                
                :? 
                
                  ”2019“
                
                ,?
 
                
                  ”版本“
                
                :? 
                
                  ”0.0.1“
                
                ?
}?

              
            
          

然后使用18.11自動生成整改工程:

            
              
                pipx 
                
                  
                    運行
                  
                
                 cookiecutter? ?Python-Practice?
 cd Python-Practice?
git init?

              
            
          

安裝依賴項

            
              
                pipenv? 
                
                  
                    安裝
                  
                
                ?
                
                  --dev?
                
              
            
          

運行pre-commit和pre-push hook:

            
              
                pipenv? 
                
                  
                    運行
                  
                
                ?pre-commit install -t pre-commit?
 pipenv? 
                
                  
                    run 
                  
                
                ?pre-commit install -t pre-push?

              
            
          

總結(jié)

本文我們介紹了在Python的項目開發(fā)時候必須要具備的一些開發(fā)測試檢查工具。通過這些可以自動生成的Python項目,代碼風(fēng)格檢查,代碼測試等操作,可以幫助我們打造一個高效完美的Python的開發(fā)環(huán)境。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 济阳县| 和平县| 和田市| 汪清县| 墨脱县| 阳泉市| 绥中县| 鄂尔多斯市| 大同县| 从化市| 罗定市| 太康县| 集贤县| 拉孜县| 九龙县| 武冈市| 勃利县| 怀安县| 子长县| 苍南县| 新疆| 德庆县| 五常市| 友谊县| 烟台市| 田东县| 马边| 杨浦区| 宜都市| 喀什市| 容城县| 汝州市| 南岸区| 镇安县| 镇宁| 江陵县| 响水县| 白山市| 青岛市| 青铜峡市| 酉阳|