日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

?Python版本沖突?優(yōu)化?Python開發(fā)環(huán)境的技巧來了

圖源Unsplash

用Python編代碼體驗(yàn)極佳,并隨著新版本的發(fā)布越來越好!對于我而言,Python提供的大量免費(fèi)函數(shù)庫、高可讀性的程序和新引入的類型注釋讓我沉迷其中無法自拔。然而,數(shù)據(jù)科學(xué)家特別容易使自己的Jupyter notebook變得龐大而雜亂,或者寫出一些難以理解的python文件。此外,當(dāng)一個(gè)項(xiàng)目依賴于同一函數(shù)庫的不同版本時(shí),常常發(fā)生版本沖突。修復(fù)以上問題消耗大量時(shí)間,還經(jīng)常導(dǎo)致其他項(xiàng)目出現(xiàn)問題。必須找到避免這類問題的解決方式,為編寫代碼提供便利。

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


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

解釋器


從使用Python時(shí)最重要的解釋器開始。你當(dāng)然可以只下載最喜歡的Python版本,然后把所有內(nèi)容放在里面。但如果你的程序需要不同版本的Python,或依賴于同一第三方模塊的不同版本,并需要在幾個(gè)程序之間無縫切換時(shí)該怎么辦?

Pyenv可以解決上述問題。

Pyenv共包含三個(gè)工具,筆者將介紹其中兩個(gè):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中的依賴性管理是項(xiàng)繁重的工作。有許多工具可以幫助完成這項(xiàng)任務(wù)。

我最常使用的工具是Poetry。

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

· 管理項(xiàng)目依賴關(guān)系

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

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

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

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

另外一種依賴性管理的方式是使用pip和pyenv-virtualenv指令。讀者可能會(huì)問:為什么不只用pip?因?yàn)橹挥胮ip可能會(huì)在全局環(huán)境中安裝poetry及其依賴項(xiàng),這可能是你不需要也不想要的。必要指令如下。

# 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)建第一個(gè)項(xiàng)目之前,建議先對其進(jìn)行配置,這樣就可以在項(xiàng)目目錄中的.venv文件夾中創(chuàng)建虛擬環(huán)境。當(dāng)你使用VsCode或Pycharm這類集成開發(fā)環(huán)境時(shí)就會(huì)變得非常方便,因?yàn)樗鼈兛梢粤⒓醋R(shí)別并選擇正確的解釋器。

poetry configsettings.virtualenvs.in-project true

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

終于完成了使用poetry創(chuàng)建項(xiàng)目的所有準(zhǔn)備工作,太棒了!我把這個(gè)項(xiàng)目命名為dsexample,我知道這個(gè)名字很蠢,但我不想浪費(fèi)時(shí)間去想一個(gè)更好的。為了展示如何使用poetry,我添加了一個(gè)特定版本的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 git@github.com:Shawe82/tf2-utils.git

如果想要查看一個(gè)使用了文中推薦工具的實(shí)際項(xiàng)目,請前往我的Github倉庫。

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

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

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

Black是一種讓程序員在編寫python代碼時(shí)能將精力集中于核心內(nèi)容的工具。它自動(dòng)為代碼添加格式,避免程序員手動(dòng)添加格式。因?yàn)锽lack的效果非常好,我們把它添加到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開始(如果我記錯(cuò)了請糾正),類型注釋開始成為標(biāo)準(zhǔn)庫的一部分通過類型注釋,代碼更好理解,更易維護(hù),不易出錯(cuò)。為什么會(huì)不易出錯(cuò)呢?因?yàn)榭梢造o態(tài)地檢查變量和函數(shù)的類型是否符合預(yù)期。當(dāng)然,必須是自動(dòng)完成的。

下面介紹mypy。

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

ypy 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)心的錯(cuò)誤發(fā)出警告。這可以通過在項(xiàng)目中添加mypy.ini文件實(shí)現(xiàn)。

將自動(dòng)化工具自動(dòng)化(Automate the Automation)

使用black和mypy,我們不再需要手工為代碼添加格式,并且可以避免不必要的錯(cuò)誤。但是我們?nèi)孕枰謩?dòng)使用這兩個(gè)工具,這兩個(gè)工具不是應(yīng)該也自動(dòng)化嗎?

是的!

Pre-commit可以完成一切。

Pre-commit工具是在代碼提交到倉庫前執(zhí)行檢查(我默認(rèn)讀者的代碼處在git的控制下)。無法通過檢查的代碼將被拒絕。這樣代碼倉庫就永遠(yuǎn)不會(huì)出現(xiàn)格式不整齊或是未經(jīng)類型檢查的代碼,以及任何其他你需要檢查錯(cuò)誤的代碼。

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

可以使用poetry將其直接安裝在項(xiàng)目里,也可以安裝在本地機(jī)器里。筆者傾向于后者,因?yàn)閜recommit只在本地使用,而不在CI/CD服務(wù)器上。相反,black和mypy在CI/CD服務(wù)器上運(yùn)行,因此,將它們添加到項(xiàng)目的dev依賴項(xiàng)是有意義的。筆者建議使用下面方法通過現(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,首先需要向頂級(jí)文件夾中添加一個(gè)名為.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)將在每次提交時(shí)運(yùn)行。Black工具的鉤子函數(shù)不僅會(huì)檢查格式,還會(huì)相應(yīng)地為文件添加格式。每次添加新的鉤子函數(shù)時(shí),建議一開始在所有文件中手動(dòng)運(yùn)行pre-commit,因?yàn)樗荒茏饔糜谏洗翁峤恢蟾倪^的文件。

pre-commit run --all-files

就這樣,對自動(dòng)化工具的自動(dòng)化完成了。


總結(jié)

有很多工具可以幫助你專注于重要的事情。此處筆者只介紹了其中的幾個(gè)。當(dāng)然,還有更多。希望你學(xué)到了新的東西后,可以更加專注于代碼本身。

分享到:
標(biāo)簽:Python
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評(píng)定2018-06-03

通用課目體育訓(xùn)練成績評(píng)定