欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python的開發必備:如何建立一個優秀的項目工程環境

系統 1714 0

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

本文以Python的為例,教大家如何快速打造優秀的Python的項目開發環境:內容涵蓋了模塊依賴管理,代碼風格管理,調試測試管理和Git版本管理,使用git hook做項目規范檢查等。

Python的開發必備:如何建立一個優秀的項目工程環境_第1張圖片

Python的開發必備:如何建立一個優秀的項目工程環境_第2張圖片

pipx

Python的開發必備:如何建立一個優秀的項目工程環境_第3張圖片

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

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

              
            
          

升級Pipx使用:

            
              
                
                  
                    python3
                  
                
                 ?-m pip install -U pipx?

              
            
          

包依賴管理pipenv

Python的開發必備:如何建立一個優秀的項目工程環境_第4張圖片

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

            
              
                
                  
                    pipx
                  
                
                 ?安裝pipenv?

              
            
          

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

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

            
              
                
                  
                    brew
                  
                
                 ?安裝pipenv?

              
            
          

一個pipfile的示例如下:

Python的開發必備:如何建立一個優秀的項目工程環境_第5張圖片

Pipfile.lock的示例部分如下:

Python的開發必備:如何建立一個優秀的項目工程環境_第6張圖片

代碼風格

代碼格式化黑色

Python的開發必備:如何建立一個優秀的項目工程環境_第7張圖片

代碼格式的統一不光可以給我們一個愜意的代碼格式,而且可以避免由于開發人員之間的代碼風格差異導致的溝通和協作問題。

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

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

原始代碼:

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

                
                  “”將`variables`應用于`template`并寫入`file ` “”” 
                
                ?

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

              
            
          

格式化后的代碼:

Python的開發必備:如何建立一個優秀的項目工程環境_第8張圖片

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

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

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

              
            
          

isort美化進口部分代碼

Python的開發必備:如何建立一個優秀的項目工程環境_第9張圖片

Python開發中經常需要導入第三方的模塊,往往這部分代碼混亂不堪,使用isort可以則可以美化這部分的代碼.isort可以按字母表順序對import進行排序,自動分成多個部分。

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

            
              
                
                  
                    pipenv
                  
                
                 ?安裝黑色isort -dev?

              
            
          

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

Python的開發必備:如何建立一個優秀的項目工程環境_第10張圖片

黑色和isort同時使用時,兩者默認配置不兼容,我們需要覆蓋isort配置,優先以黑色的格式化為準。可以通過setup.cfg文件并添如下配置來完成該任務。

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

              
            
          

flake8代碼風格檢測

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

其安裝也可以使用pipenv:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝flake8 -dev?

              
            
          

flake8的使用示例如下:

Python的開發必備:如何建立一個優秀的項目工程環境_第11張圖片

flake8 example.py的檢查結果:

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

flake8 - 選擇E,F example.py,結果:

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

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

              
            
          

mypy靜態類型

Python的開發必備:如何建立一個優秀的項目工程環境_第12張圖片

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

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

可以幫助編譯時調試和發現錯誤,減少測試和調試。

可以在代碼部署到生產環境之前就可以找到難以捕捉的錯誤。

可以使用pipenv直接安裝Mypy:

            
              
                
                  
                    pipenv
                  
                
                 ?安裝mypy -dev?

              
            
          

mypy動態類型和靜態類型一個示例如下:

Python的開發必備:如何建立一個優秀的項目工程環境_第13張圖片

項目配置

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

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

              
            
          

代碼測試

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

Python的開發必備:如何建立一個優秀的項目工程環境_第14張圖片

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

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

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

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

                
                  
                    return
                  
                
                 ?x +? 
                
                  1 
                
                ?

                
                  
                    def 
                  
                
                ?
                
                  
                    test_answer 
                  
                
                ():?

                
                  
                    assert
                  
                
                 ?inc(
                
                  3
                
                )==? 
                
                  5
                
                ?

              
            
          

通過以下命令測試

            
              
                pipenv? 
                
                  
                    運行
                  
                
                ?pytest?

              
            
          

結果如下:

Python的開發必備:如何建立一個優秀的項目工程環境_第15張圖片

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

Python的開發必備:如何建立一個優秀的項目工程環境_第16張圖片

pytest還有很多的擴展插件:

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

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

pytest-ASYNCIO:對ASYNCIO的支持

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

pytest-instafail:發送錯誤時報告錯誤信息

pytest-bdd測試驅動開發工具

pytest-konira測試驅動開發工具

pytest-timeout:支持超時功能

pytest-pep8:支持PEP8檢查

pytest-flakes:結合pyflakes進行代碼檢查

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

項目配置

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

            
              
                
                  
                    [tool:pytest] 
                  
                
                ?
testpaths = test?

              
            
          

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

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

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

              
            
          

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

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

              
            
          

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

Git pre-commit hook規范檢查

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

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

                
                  種類型:
                
                 ?[python]?

              
            
          

如果你需要跳過這些鉤子,你可以運行git commit --no-verify或git push --no-verify

18.11自動創建項目

Python的開發必備:如何建立一個優秀的項目工程環境_第17張圖片

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

            
              
                cookiecutter.json?
{?

                
                  “full_name”
                
                :? 
                
                  “Chongchong”
                
                ,?
 
                
                  “email”
                
                :? 
                
                  “chongchong@ijz.me”
                
                ,?
 
                
                  “project_name”
                
                :? 
                
                  “Python-Practice”
                
                ,?
 
                
                  “repo_name”
                
                :? 
                
                  “”
                
                 Python-Practice? 
                
                  “,? 
                
                
                  ”project_short_description“
                
                :? 
                
                  ”簡單的Python開發練習示例?!?
                
                ,?
 
                
                  ”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?

              
            
          

總結

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 人人看人人舔 | 欧美综合久久 | 国产高清一区 | 欧美黄色一区 | 中文字幕在线精品 | 波多野结衣手机在线播放 | 成人免费高清 | 午夜亚洲精品 | 亚洲第一大网站 | 国产一级在线观看视频 | 猫咪人成免费网站在线观看 | 色综合色综合色综合 | 一区二区三区欧美精品 | 欧美性a视频 | 久草2| a欧美 | 欧美国产另类 | 国产精品福利在线观看秒播 | 91视频最新网站 | 免费国产一区二区在免费观看 | 精品一卡2卡三卡4卡免费视频 | 久久精品中文字幕首页 | 亚洲精品美女久久久 | 网站一区 | 国产在线观看午夜不卡 | 欧美一区二区三区精品国产 | 东京不太热在线新视频 | 毛片免费一区二区三区 | 九九久久精品这里久久网 | 午夜小视频在线播放 | 欧美一级黄色影院 | 国产在线精品二区韩国演艺界 | 日韩精品视频一区二区三区 | 成人免播放器午夜视频 | 免费欧美黄色 | 一级黄色毛片a | 97爱爱爱 | 国产一区二区三区视频 | 99国产欧美久久精品 | 波多久久夜色精品国产 | 99热官网|