黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 2042 0

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

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

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

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

pipx

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

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

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

              
            
          

升級(jí)Pipx使用:

            
              
                
                  
                    python3
                  
                
                 ?-m pip install -U pipx?

              
            
          

包依賴管理pipenv

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

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

            
              
                
                  
                    pipx
                  
                
                 ?安裝pipenv?

              
            
          

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

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

            
              
                
                  
                    brew
                  
                
                 ?安裝pipenv?

              
            
          

一個(gè)pipfile的示例如下:

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

Pipfile.lock的示例部分如下:

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

代碼風(fēng)格

代碼格式化黑色

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

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

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

一個(gè)黑色格式化示例如下:

原始代碼:

            
              
                
                  
                    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ā)必備:如何建立一個(gè)優(yōu)秀的項(xiàng)目工程環(huán)境_第8張圖片

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

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

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

              
            
          

isort美化進(jìn)口部分代碼

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

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

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

            
              
                
                  
                    pipenv
                  
                
                 ?安裝黑色isort -dev?

              
            
          

isort的效果示例,可以看下面的動(dòng)圖:

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

黑色和isort同時(shí)使用時(shí),兩者默認(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)格檢測(cè)

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

其安裝也可以使用pipenv:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝flake8 -dev?

              
            
          

flake8的使用示例如下:

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

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

flake8默認(rèn)會(huì)忽略一些約定(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ā)必備:如何建立一個(gè)優(yōu)秀的項(xiàng)目工程環(huán)境_第12張圖片

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

可以使程序更易于理解和維護(hù);

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

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

可以使用pipenv直接安裝Mypy:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝mypy -dev?

              
            
          

mypy動(dòng)態(tài)類型和靜態(tài)類型一個(gè)示例如下:

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

項(xiàng)目配置

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

            
              
                
                  
                    [mypy] 
                  
                
                ?
files =項(xiàng)目,test?
 ignore_missing_imports = 
                
                  true
                
                ?

              
            
          

代碼測(cè)試

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

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

可以使用pipenv添加測(cè)試工具包及擴(kuò)展:

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

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

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

                
                  
                    return
                  
                
                 ?x +? 
                
                  1 
                
                ?

                
                  
                    def 
                  
                
                ?
                
                  
                    test_answer 
                  
                
                ():?

                
                  
                    assert
                  
                
                 ?inc(
                
                  3
                
                )==? 
                
                  5
                
                ?

              
            
          

通過以下命令測(cè)試

            
              
                pipenv? 
                
                  
                    運(yùn)行
                  
                
                ?pytest?

              
            
          

結(jié)果如下:

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

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

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

pytest還有很多的擴(kuò)展插件:

pytest-cov:?jiǎn)卧獪y(cè)試覆蓋率報(bào)告

pytest-django:對(duì)Django框架的單元測(cè)框架

pytest-ASYNCIO:對(duì)ASYNCIO的支持

pytest-twisted:對(duì)扭框架的單元測(cè)框架

pytest-instafail:發(fā)送錯(cuò)誤時(shí)報(bào)告錯(cuò)誤信息

pytest-bdd測(cè)試驅(qū)動(dòng)開發(fā)工具

pytest-konira測(cè)試驅(qū)動(dòng)開發(fā)工具

pytest-timeout:支持超時(shí)功能

pytest-pep8:支持PEP8檢查

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

更多插件可以查看github pytest-dev組織下的項(xiàng)目。

項(xiàng)目配置

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

            
              
                
                  
                    [tool:pytest] 
                  
                
                ?
testpaths = test?

              
            
          

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

            
              
                [跑]?
source =項(xiàng)目?
[報(bào)告]?
exclude_lines =?

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

              
            
          

然后再工程中運(yùn)行一下命令,測(cè)試項(xiàng)目的覆蓋率

            
              
                pipenv? 
                
                  
                    運(yùn)行
                  
                
                ?pytest --cov --cov-fail-under = 100?

              
            
          

如果程序代碼的測(cè)試覆蓋率低于100%時(shí),就會(huì)報(bào)錯(cuò)。

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

Git hook可以讓我們?cè)谔峤换蛲扑蜁r(shí)執(zhí)行檢查腳本,腳本可以配置對(duì)項(xiàng)目鏡像測(cè)試或者規(guī)范性檢查。運(yùn)行腳本。我們可以配置pre-commit hook允許輕松配置這些鉤子,下面.pre-commit-config。 YAML配置示例可以幫我們自動(dòng)做代碼規(guī)范化,包括isort檢查,黑檢查,flake8檢查,mypy靜態(tài)類型檢查,pytest測(cè)試,pytest冠狀病毒測(cè)試覆蓋率檢查:

            
              
                
                  repos:
                
                 ?
-? 
                
                  repo:
                
                 ?local?
 
                
                  hooks:
                
                 ?
-? 
                
                  id:
                
                 ?isort?
 
                
                  name:
                
                 ?isort?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  條目:
                
                 ?pipenv run isort?
 
                
                  類型:
                
                 ?[python]?
-? 
                
                  id:
                
                 ?黑?
 
                
                  名:
                
                 ?黑?
 
                
                  階段:
                
                 ?[commit]?
 
                
                  語言:
                
                 ?系統(tǒng)?
 
                
                  入口:
                
                 ?pipenv運(yùn)行黑色?
 
                
                  類型:
                
                 ?[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]?

              
            
          

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

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

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

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

            
              
                cookiecutter.json?
{?

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

              
            
          

然后使用18.11自動(dòng)生成整改工程:

            
              
                pipx 
                
                  
                    運(yùn)行
                  
                
                 cookiecutter? ?Python-Practice?
 cd Python-Practice?
git init?

              
            
          

安裝依賴項(xiàng)

            
              
                pipenv? 
                
                  
                    安裝
                  
                
                ?
                
                  --dev?
                
              
            
          

運(yùn)行pre-commit和pre-push hook:

            
              
                pipenv? 
                
                  
                    運(yùn)行
                  
                
                ?pre-commit install -t pre-commit?
 pipenv? 
                
                  
                    run 
                  
                
                ?pre-commit install -t pre-push?

              
            
          

總結(jié)

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論