国产成人激情在线_人人干日日干_365porn_在线一区视频_国产高清在线观看_91插插插影院

環(huán)球滾動(dòng):如何減輕 Python 打包之痛

時(shí)間:2023-07-04 13:31:00 來源: CSDN


本文主要介紹 Python 包管理的問題和解決方法,以及在安裝和運(yùn)行 Python 時(shí)應(yīng)遵循的策略和步驟。


(相關(guān)資料圖)

原文鏈接:https://www.bitecode.dev/p/relieving-your-python-packaging-pain

未經(jīng)允許,禁止轉(zhuǎn)載!

作者 | Bite Code 譯者 | 明明如月

責(zé)編 | 夏萌

出品 | CSDN(ID:CSDNnews)

隨著 Python 3 的普及,Guido 正在致力于提升這門語言的運(yùn)行速度,而社區(qū)中新的抱怨焦點(diǎn)則轉(zhuǎn)向了包管理。

關(guān)于這個(gè)話題有很多可以深入探討的地方,如包的構(gòu)建、分發(fā)及其他諸多問題,但這并不是大部分用戶所面臨的困擾。

真正困擾大家的是,他們?cè)趪L試安裝和使用某個(gè)包時(shí),往往會(huì)遇到預(yù)料之外的問題。

本文主要聚焦于幫助你解決這個(gè)問題,至少,可以幫你搞定絕大多數(shù)情況。

然而,你可能會(huì)發(fā)現(xiàn)奇怪的現(xiàn)象:你至今為止試過的所有方法都沒有奏效。事實(shí)上,大多數(shù)關(guān)于這個(gè)話題的建議可能都無法真正幫助你。

這是因?yàn)樵?Python 包管理中,絕大部分問題并非直接由包管理本身引起。

問題的癥結(jié)在于 Python 的啟動(dòng)問題,也就是如何找到、安裝、配置并運(yùn)行 Python 的過程。

在過去的 15 年中,我嘗試過所有可能的方法,無論對(duì)于專家或是初學(xué)者,無論對(duì)于專業(yè)人士或是業(yè)余愛好者,都沒有找到 " 唯一的正確答案 "。

然而,對(duì)大多數(shù)人來說,有一種方法會(huì)讓失敗的次數(shù)少很多。

在這篇文章中,我將列出一系列需要遵循的步驟,并在另一篇新文章中解釋這些步驟的原因。

概述

你只需要遵循下面的 Python 的安裝和運(yùn)行策略,就可以規(guī)避許多包管理方面的問題:

不要急于安裝 Python 的最新版本

在 Windows 和 Mac 上,堅(jiān)持使用 python.org 的安裝程序,在 Linux 上則使用官方倉(cāng)庫(kù)。

絕對(duì)不在虛擬環(huán)境之外安裝或運(yùn)行任何程序

讓自己只使用基礎(chǔ)的命令:pip 和 venv

執(zhí)行命令時(shí),使用 -m 參數(shù)

在創(chuàng)建虛擬環(huán)境時(shí),使用命令行參數(shù)明確指定 Python 版本

不要盲目追求 Python 的最新版本

對(duì),最新版本的 Python 總是那么閃亮奪目,性能更強(qiáng),新功能特性眾多,令人心動(dòng)。我并不是說你不應(yīng)該去嘗試它,熟悉它。然而,對(duì)于你的項(xiàng)目來說,你最好不要采用這個(gè)最新版本。

因此,假設(shè) Python 3.11 是最新的主版本,你最好使用的版本應(yīng)當(dāng)是 3.10,或者更舊的版本。如果可能的話(我理解沒有人希望每年都更新 Python 版本),最好將你的版本目標(biāo)設(shè)定在最新主版本的前四個(gè)版本,例如在本例中,就應(yīng)選擇 3.7 版本。

如果你對(duì)此有疑問,可以查看 Python 狀態(tài)頁。

在這個(gè)頁面上,"feature" 指的是當(dāng)前正在開發(fā)的版本,"bugfix" 指的是仍在接收錯(cuò)誤修復(fù)的版本,"security" 指的是仍在接收安全問題修復(fù)的版本,而 "end-of-line" 則代表已經(jīng)停止更新的版本。

在 Windows 和 Mac 上,使用官方安裝器

安裝 Python 的方式有很多種,你選擇何種方式安裝非常關(guān)鍵。

是應(yīng)該使用 Homebrew、Windows 商店,還是使用 Anaconda?答案是都不應(yīng)該。

你應(yīng)該直接訪問 python.org,使用他們提供的 Windows 版 Python 安裝器 或 Mac 版安裝器。

如果你想知道為什么這么做,可以查閱我寫的 另一篇文章。

如果你想了解安裝的步驟,可以參考我寫的另外一篇專門講解 講解 Python 完整安裝過程的文章。

另外,我知道有些用戶因?yàn)槟承┰虮仨毷褂?Anaconda,在文末我將為你解答。

在 Linux 上,使用官方倉(cāng)庫(kù)

請(qǐng)使用你的發(fā)行版附帶的官方工具來安裝 Python,可能是 "apt","yum","dnf" 等等。

你將受限于倉(cāng)庫(kù)中的 Python 版本,但要抵制使用 pyenv 來規(guī)避這一點(diǎn)的誘惑。

如果恰巧你在使用 Ubuntu,你就很幸運(yùn):你可以使用 deadsnake PPA 來增加你可用的版本數(shù)。

同樣的,如果你在 Red Hat 上,可以使用 EPEL。

你可能在 Windows/Mac 上開發(fā)并在 Linux 上部署。在這種情況下,檢查 Linux 機(jī)器上可用的版本,并在 Windows 上安裝相同版本的 Python。

如果以上建議你還聽不太明白,可以查看 與這個(gè)主題的完整教程。

安裝軟件包時(shí),堅(jiān)持使用 pip

請(qǐng)避免使用 conda。

請(qǐng)避免使用 poetry、pipenv、pdm、easy_install。

同樣地,不要使用 pipx。請(qǐng)注意,pipx 和 pip 是兩個(gè)完全不同的工具。

不要使用像 apt、yum 等的工具。

如果你對(duì) pip 感到陌生,或不清楚如何使用它,不用擔(dān)心,我們將在約兩周后的一篇文章中對(duì)此進(jìn)行詳細(xì)講解。

總是在虛擬環(huán)境中使用 pip

正因?yàn)槟阏陂喿x這篇文章,也就意味著你可能尚不具備跳過此規(guī)則所需要的知識(shí)。

因此,千萬別忽視它。

這是最重要的規(guī)則。

無論你需要安裝什么,都應(yīng)該在虛擬環(huán)境中進(jìn)行。

不論你要安裝的是 black、jupyter、mypy,還是你目前正在考慮的任何軟件包,都應(yīng)該在虛擬環(huán)境中安裝。

最關(guān)鍵的是,當(dāng)你在安裝任何東西時(shí),如果你不確定自己是否在虛擬環(huán)境中,你首先要做的就是確認(rèn)你正處于虛擬環(huán)境。

如果你在安裝過程中輸入了 "--user",那么說明你并未在虛擬環(huán)境中安裝。

如果你在輸入 "sudo",你也未在虛擬環(huán)境中安裝。

一旦在虛擬環(huán)境中安裝了軟件包,為了使用它們,你需要保持在同一環(huán)境中。因此,所有的命令,包括運(yùn)行 pip,都應(yīng)該在虛擬環(huán)境中進(jìn)行。

如果你對(duì)虛擬環(huán)境感到陌生,或者不清楚如何使用它,沒關(guān)系,我們將在后面的文章中進(jìn)行詳細(xì)解析。

的確,這有點(diǎn)讓人感到困擾。你只是想編程,而不想被這個(gè)麻煩的虛擬環(huán)境困擾。為什么它就不能像 cargo 或 npm 那樣簡(jiǎn)單呢?

這個(gè)問題的答案相當(dāng)復(fù)雜。

但現(xiàn)實(shí)情況是,目前你沒有任何可靠的方法可以在沒有虛擬環(huán)境的情況下安裝任何東西。

所以你有兩個(gè)選擇:不使用虛擬環(huán)境,然后遭受各種各樣的問題;或者使用虛擬環(huán)境,只需要承受一些小小的麻煩。

只使用 "venv" 來創(chuàng)建虛擬環(huán)境

venv 是大部分 Python 安裝包默認(rèn)附帶的命令,你應(yīng)該用它來創(chuàng)建新的虛擬環(huán)境。

當(dāng)然,還有一些其他的命令,例如 virtualenv 和 virtualenvwrapper。

你的選擇是:不用它們。

還有一些其他的工具,比如 pipx、pdm、poetry 和 pipenv。

同樣,不用它們。

顯然,anaconda 自帶了 env 子命令。

這個(gè)你應(yīng)該知道:也不要用它。

此刻,那些正在使用這些工具的讀者可能已經(jīng)開始心潮澎湃。請(qǐng)記住,關(guān)于這個(gè)話題,我們有另一篇文章。

需要注意的是,venv 是與 python.org 的 Python 安裝器捆綁在一起的,但是在 Linux 上,你可能需要安裝一個(gè)特定的包,這將是我們下周要討論的內(nèi)容。

在運(yùn)行 Python 命令時(shí),添加 -m 參數(shù)

-m 是 "python" 命令中的一個(gè)參數(shù),大部分用戶可能并不了解它。但是它可以讓你運(yùn)行任何可導(dǎo)入的 Python 模塊。由于大多數(shù)命令都是 Python 模塊,因此我們可以用這個(gè)參數(shù)來指示," 運(yùn)行這個(gè)特定的 python 模塊 X"。

不要這樣:

pip install

應(yīng)該這樣:

python -m pip install

不要這樣:

black

應(yīng)該這樣:

python -m black

不要這樣:

jupyter notebook

應(yīng)該這樣:

python -m jupyter notebook

即使你在虛擬環(huán)境中,盡管有人可能會(huì)告訴你一大堆不一樣的話,你仍然應(yīng)該這樣做。

的確,這很繁瑣。你只是想寫代碼,不想被這個(gè)煩人的 -m 打擾。為什么它不能像其他工具那樣開箱即用呢?

這個(gè)問題說來話長(zhǎng)。

但是現(xiàn)在的情況是,你目前沒有任何可靠的方式在不使用 -m 的情況下運(yùn)行任何 Python 命令。

所以,你有兩個(gè)選擇。不使用 -m,受盡困擾。或者使用 -m,只承受一點(diǎn)點(diǎn)困擾。

創(chuàng)建虛擬環(huán)境時(shí),要明確所使用的 Python 版本

計(jì)算機(jī)上存在多個(gè) Python 版本是非常常見的事,而你可能并不清楚這一情況。在創(chuàng)建虛擬環(huán)境時(shí),你應(yīng)該明確聲明要使用哪個(gè) Python 版本,因?yàn)檫@個(gè)環(huán)境將會(huì)永久性地關(guān)聯(lián)這個(gè)特定版本的 Python。

在 Windows 系統(tǒng)中,這意味著使用 py 命令,它是 python.org 的安裝程序所附帶的,并可以通過以下命令列出在你的計(jì)算機(jī)上所有已安裝的 Python 版本:

py --list-paths

你可能會(huì)看到類似于下面的輸出:

-3.9 C:Python39python.exe -3.8 C:Python38python.exe * -3.7 C:Python37python.exe

然后,你可以選擇使用哪個(gè) Python 版本,如:

py -X.Y

例如,想要運(yùn)行 Python 3.7,可以輸入:

py -3.7>>> print ( "Hello" ) Hello

在 Linux 和 Mac 系統(tǒng)中,你需要使用帶有版本后綴的 pythonX.Y 命令。

例如,要運(yùn)行 Python 3.7,可以輸入:

python3.7>>> print ( "Hello" ) Hello

如果你已經(jīng)在機(jī)器上安裝了 Python,這些指令都可以為你選擇一個(gè)已經(jīng)安裝在你的機(jī)器上的 Python 版本并運(yùn)行。如果你還沒有裝過 Python ,是無法運(yùn)行的。

請(qǐng)注意,如果你按照以上所有步驟進(jìn)行操作,那就意味著你會(huì)同時(shí)使用 venv 和 -m。

因此,在創(chuàng)建虛擬環(huán)境時(shí),你可能會(huì)輸入一些看起來很復(fù)雜的命令。

例如,Windows 系統(tǒng)下的命令為:

"py -3.8 -m venv .venv"

在 Linux 和 Mac 系統(tǒng)下,命令為:

"python3.8 -m venv .venv"

(如果這些對(duì)你來說沒有意義,我們會(huì)在另一篇文章中進(jìn)行解釋)

這些命令看起來可能有些復(fù)雜,但其實(shí)這就是非常正確的做法。

這確實(shí)有些麻煩。你可能只是想編寫代碼,而不想處理這些繁瑣的步驟。我們?yōu)槭裁匆獙懸恍┻B Chat GPT 都不推薦的東西呢?

回答這個(gè)問題需要長(zhǎng)篇大論。

但事實(shí)是,目前沒有任何可靠的方法可以在不做這些的情況下創(chuàng)建虛擬環(huán)境。

所以你有兩個(gè)選擇。一是繼續(xù)采用你的原來做法,然后飽受困擾;二是將這段復(fù)雜的命令保存在一個(gè)文件中,每次需要時(shí)復(fù)制粘貼一下,只需飽受一點(diǎn)點(diǎn)困擾。

如果你必須使用 Anaconda,該如何應(yīng)對(duì)?

首先,確保你確實(shí)需要使用 Anaconda。我曾經(jīng)遇到很多人誤以為他們必須使用 Anaconda,然而當(dāng)他們按照上述步驟進(jìn)行操作后,他們發(fā)現(xiàn)其實(shí)并非如此。自從 pypi 引入了 wheel 文件后,一些過去安裝起來讓人頭疼的包,比如 GUI 工具包(GUI tool-kits)或科學(xué)計(jì)算相關(guān)的包,現(xiàn)在的安裝過程變得輕松許多。

然而,我明白有些人是真的必須使用 Anaconda。

可能你的項(xiàng)目復(fù)雜且需要機(jī)器學(xué)習(xí),或者你的公司的策略就是只使用 Anaconda。

在這種情況下,你依然可以在 Anaconda 的環(huán)境中運(yùn)行。

對(duì)于所有操作,只使用 conda,僅僅使用 conda。

不要嘗試使用 pip 或 venv。尤其是,千萬不要嘗試將 conda 與其混合使用。

這樣做雖然會(huì)限制你只能使用 Anconda 渠道中的資源,但這是保持工作流程清晰的唯一方式。

對(duì)于你應(yīng)該始終創(chuàng)建虛擬環(huán)境并在其中進(jìn)行所有操作的建議仍然適用,只是這個(gè)虛擬環(huán)境需要通過 conda 來創(chuàng)建。

關(guān)鍵詞:

網(wǎng)站簡(jiǎn)介 網(wǎng)站團(tuán)隊(duì) 本網(wǎng)動(dòng)態(tài) 友情鏈接 版權(quán)聲明 我要投稿

Copyright? 2014-2020 中原網(wǎng)視臺(tái)(www.b4dc4.cn) All rights reserved.

主站蜘蛛池模板: 国内精品第一页 | 秋霞免费手机理论视频在线观看 | 久久久久久影院 | 一级片免费 | 男人天堂网www| 污片在线 | 1313午夜精品理论片 | 国内精品久久久久久无码不卡 | 日韩在线视频不卡 | 欧美线人一区二区三区 | 99热这里只有精品免费播放 | 天堂网在线新版www 天堂网在线最新版www | 亲嘴扒胸摸屁股激烈网站 | 黄视频免费在线看 | 第一福利在线观看永久视频 | 亚洲国产精品久久久久婷蜜芽 | 中文字幕精品一区二区三区在线 | 九九精品久久久久久噜噜 | 国产一级片网站 | 四虎成人免费电影 | 久久人妻av无码中文专区 | 国产69精品久久久久乱码 | 国产日韩成人内射视频 | 日韩精品无码av中文无码版 | 国产熟人av一二三区 | 成人欧美视频在线看免费 | 久久99久久99精品 | 十八禁啪啪无遮挡网站 | 黄色片免费在线观看 | 在线免费黄色 | 欧美牲交a欧美牲交aⅴ免费下载 | 国产精品高清视亚洲精品 | 亚洲网站视频 | 国产精品网址你懂的 | 亚洲精品一区二区三区五区 | 伊人久久大香线蕉综合bd高清 | 国产精品三区四区 | 欧洲成品大片在线播放 | 亚洲第5页 | 成人a视频高清在线观看 | 国产毛片毛片精品天天看 |