<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          優(yōu)化 Python 開發(fā)環(huán)境的幾個神技巧

          共 6352字,需瀏覽 13分鐘

           ·

          2021-09-03 23:20

          用Python編代碼體驗極佳,并且隨著新版本的發(fā)布越來越好!

          對于很多人而言,Python提供的大量免費(fèi)函數(shù)庫、高可讀性的程序和新引入的類型注釋讓很多愛不釋手。

          然而,數(shù)據(jù)科學(xué)家特別容易使自己的Jupyter notebook變得龐大而雜亂,或者寫出一些難以理解的python文件。

          此外,當(dāng)一個項目依賴于同一函數(shù)庫的不同版本時,常常發(fā)生版本沖突。

          修復(fù)以上問題消耗大量時間,還經(jīng)常導(dǎo)致其他項目出現(xiàn)問題。必須找到避免這類問題的解決方式,為編寫代碼提供便利。

          在本篇文章中我將詳細(xì)介紹常用的工具與技巧,希望能給大家提供幫助。

           Python開發(fā)環(huán)境

          解釋器:

          從使用Python最重要的解釋器開始。你可以只下載最喜歡的Python版本,然后把所有內(nèi)容放在里面。

          但如果你的程序需要不同版本的Python,或依賴于同一第三方模塊的不同版本,并需要在幾個程序之間無縫切換時該怎么辦?

          Pyenv可以解決上述問題。

          Pyenv共包含三個工具,下面將介紹其中兩個:pyenv(用于安裝python)pyenv-virtualenv(用于配置全局工具)。

          可通過下方網(wǎng)址安裝pyenv:

          curl https://pyenv.run | bash 

          安裝后,向.bashrc(或.zshrc)文件中添加下方代碼,使得pyenv可用于設(shè)備。

          exportPATH="~/.pyenv/bin:$PATH"

          eval "$(pyenv init -)"

          eval "$(pyenv virtualenv-init -)"

          最后,重啟設(shè)備。

          現(xiàn)在可以使用pyenv安裝幾乎所有的python解釋器,包括pypy、anaconda。

          需要注意的是,pyenv只在電腦上搭建本地python環(huán)境。搭建python環(huán)境需要多種函數(shù)庫。

          在Ubuntu系統(tǒng)的電腦上,必須安裝以下函數(shù)庫以防止運(yùn)行出現(xiàn)問題。

          sudo apt-get installbuild-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev
          zlib1g-dev libssl-dev openssllibgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libncursesw5-devlibffi-dev uuid-dev

          現(xiàn)在,要安裝python解釋器只需要執(zhí)行以下指令。

          pyenv installVERSION_YOU_WOULD_LIKE_TO_INSTALL

          可以通過pyenv列出所有可用版本。

          pyenv install --list

          為了使上述過程更加具體,在此安裝python3.7.5并且設(shè)置其為默認(rèn)的全局解釋器。

          pyenv install 3.7.5

          pyenv global 3.7.5

          輸入Python-version指令,屏幕將顯示Python3.7.5。

          依賴性關(guān)系管理(DependencyManagement)

          Python中的依賴性管理是項繁重的工作。有許多工具可以幫助完成這項任務(wù)。

          我最常使用的工具是Poetry

          Poetry可以幫助你簡單地完成如下工作。

          管理項目依賴關(guān)系

          通過虛擬環(huán)境將項目分開

          輕松構(gòu)建應(yīng)用程序與函數(shù)庫

          推薦通過以下方式安裝poetry:

          curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

          另外一種依賴性管理的方式是使用pip和pyenv-virtualenv指令。

          大家可能會問:為什么不只用pip?

          因為只用pip可能會在全局環(huán)境中安裝poetry及其依賴項,這可能是你不需要也不想要的。

          必要指令如下:

          # Create a virtual environmentcalled tools that is based on 3.7.5
          pyenv virtualenv 3.7.5 tools

          #
           Install poetry into the tools virtual env
          pyenv activate tools
          pip install poetry

          #
           Check installed poetry version
          poetry --version

          #
           Leave the virtual env
          pyenv deactivate

          #
           This does not work yet
          poetry --version

          #
           Add your tools virtual env to the globally available ones
          pyenv global 3.7.5 tools

          #
           Now this works and you can start using poetry
          poetry --version

          在使用poetry創(chuàng)建第一個項目之前,建議先對其進(jìn)行配置,這樣就可以在項目目錄中的.venv文件夾中創(chuàng)建虛擬環(huán)境。

          當(dāng)你使用VsCode或Pycharm這類集成開發(fā)環(huán)境時就會變得非常方便,因為它們可以立即識別并選擇正確的解釋器。

          poetry configsettings.virtualenvs.in-project true

          注意:你只需設(shè)置一次配置,設(shè)置結(jié)果將在全局環(huán)境保留。

          終于完成了使用poetry創(chuàng)建項目的所有準(zhǔn)備工作,我把這個項目命名為dsexample,為了展示如何使用poetry,我添加了一個特定版本的pandas庫,以及所有額外需求的fastapi框架。

          # Initialze a new project
          poetry new dsexample
          cd dsexample

          #
           Add modules and create virtual environment.
          poetry add pandas=0.25 fastapi --extras all

          #
           As an example of how you could add a git module
          poetry add tf2-utils --git [email protected]:Shawe82/tf2-utils.git

          格式一致性與可讀性(Consistent Formatting and Readability)

          現(xiàn)在,已經(jīng)創(chuàng)建好了項目,即將開始添加代碼。理想情況下,代碼庫的格式應(yīng)該一致,以確保可讀性和可理解性。這將是一個非常沉悶乏味的過程,尤其在還有其他人操作代碼庫時。

          但用Black可以解決上述問題!

          Black是一種讓程序員在編寫python代碼時能將精力集中于核心內(nèi)容的工具。它自動為代碼添加格式,避免程序員手動添加格式。

          因為Black的效果非常好,我們把它添加到dsexample中,讓它為所有的文件添加格式。

          # We add black as a developmentdependency with --dev as we don't
          # need it when it comes to production
          poetry add --dev black=19.3b0

          #
           Assume we are inside the current toplevel dsexample folder
          poetry run black .

          好了,現(xiàn)在所有的文件看起來非常整齊了。

          類型糾正(Type-Correctness)

          自Python3.5開始,類型注釋開始成為標(biāo)準(zhǔn)庫的一部分通過類型注釋,代碼更好理解,更易維護(hù),不易出錯。

          為什么會不易出錯呢?因為可以靜態(tài)地檢查變量和函數(shù)的類型是否符合預(yù)期。當(dāng)然,必須是自動完成的。

          下面介紹mypy!

          Mypy是一種靜態(tài)python代碼檢查器,作用是在錯誤發(fā)生之前找到他們。使用poetry向項目中添加mypy并進(jìn)行代碼檢查與添加black一樣簡單。

          # mypy as a developmentdependency with --dev as we don't
          # need it when it comes to production
          poetry add --dev mypy

          #
           Assume we are inside the current toplevel dsexample folder
          poetry run mypy .

          運(yùn)行mypy也可能導(dǎo)致很多麻煩。當(dāng)然,可以將其設(shè)置為只對你關(guān)心的錯誤發(fā)出警告。這可以通過在項目中添加mypy.ini文件實(shí)現(xiàn)。

          將自動化工具自動化(Automate the Automation)

          使用black和mypy,我們不再需要手工為代碼添加格式,并且可以避免不必要的錯誤。

          但是我們?nèi)孕枰謩邮褂眠@兩個工具,這兩個工具不是應(yīng)該也自動化嗎?

          是的!

          Pre-commit可以完成一切。

          Pre-commit工具是在代碼提交到倉庫前執(zhí)行檢查(我默認(rèn)讀者的代碼處在git的控制下)。無法通過檢查的代碼將被拒絕。

          這樣代碼倉庫就永遠(yuǎn)不會出現(xiàn)格式不整齊或是未經(jīng)類型檢查的代碼,以及任何其他你需要檢查錯誤的代碼。

          現(xiàn)在來安裝pre-commit。

          可以使用poetry將其直接安裝在項目里,也可以安裝在本地機(jī)器里。我傾向于后者,因為precommit只在本地使用,而不在CI/CD服務(wù)器上。

          相反,black和mypy在CI/CD服務(wù)器上運(yùn)行,因此,將它們添加到項目的dev依賴項是有意義的。

          建議使用下面方法通過現(xiàn)有的工具虛擬環(huán)境安裝它!

          # Install pre-commit into the tools virtual env
          pyenv activate tools
          pip install pre-commit

          #
           Leave the virtual env
          pyenv deactivate

          #
           As we have already added the tool venv, it will work directly
          pre-commit --version

          要使用pre-commit,首先需要向頂級文件夾中添加一個名為.pre-commit-config.yarm的文件。在該文件里,你需要配置所有應(yīng)該運(yùn)行的鉤子。

          在mypy與Black的環(huán)境下,文件內(nèi)容如下所示:

          repos:
            - repo: https://github.com/ambv/black 
              rev: 19.3b0 
              hooks: 
              - id: black 
                language_version: python3.7
            - repo: https://github.com/pre-commit/mirrors-mypy 
              rev: v0.740 
              hooks: 
              - id: mypy

          最后,你必須執(zhí)行以下命令以設(shè)置鉤子。

          # I assume your are in the toplevel folder
          pre-commit install

          現(xiàn)在,鉤子函數(shù)(hook)將在每次提交時運(yùn)行。Black工具的鉤子函數(shù)不僅會檢查格式,還會相應(yīng)地為文件添加格式。

          每次添加新的鉤子函數(shù)時,建議一開始在所有文件中手動運(yùn)行pre-commit,因為它只能作用于上次提交之后更改過的文件。

          pre-commit run --all-files

          就這樣,對自動化工具的自動化完成了。

          - EOF -


          回復(fù)關(guān)鍵字“簡明python ”,立即獲取入門必備書籍簡明python教程》電子版

          回復(fù)關(guān)鍵字爬蟲”,立即獲取爬蟲學(xué)習(xí)資料

          點(diǎn)擊關(guān)注【python入門與進(jìn)階】,閱讀更多精彩內(nèi)容
          ??????

          推薦

          瀏覽 58
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青操在线观看av | 加勒比视频在线二三区 | 黄色激情网站 | 国产精品麻豆三级三级视频 | 国产精品福利导航 |