天天最資訊丨如何減輕 Python 打包之痛
本文主要介紹 Python 包管理的問題和解決方法,以及在安裝和運行 Python 時應遵循的策略和步驟。
(相關資料圖)
原文鏈接:https://www.bitecode.dev/p/relieving-your-python-packaging-pain
未經允許,禁止轉載!
作者 | Bite Code 譯者 | 明明如月
責編 | 夏萌
出品 | CSDN(ID:CSDNnews)
隨著 Python 3 的普及,Guido 正在致力于提升這門語言的運行速度,而社區中新的抱怨焦點則轉向了包管理。
關于這個話題有很多可以深入探討的地方,如包的構建、分發及其他諸多問題,但這并不是大部分用戶所面臨的困擾。
真正困擾大家的是,他們在嘗試安裝和使用某個包時,往往會遇到預料之外的問題。
本文主要聚焦于幫助你解決這個問題,至少,可以幫你搞定絕大多數情況。
然而,你可能會發現奇怪的現象:你至今為止試過的所有方法都沒有奏效。事實上,大多數關于這個話題的建議可能都無法真正幫助你。
這是因為在 Python 包管理中,絕大部分問題并非直接由包管理本身引起。
問題的癥結在于 Python 的啟動問題,也就是如何找到、安裝、配置并運行 Python 的過程。
在過去的 15 年中,我嘗試過所有可能的方法,無論對于專家或是初學者,無論對于專業人士或是業余愛好者,都沒有找到 " 唯一的正確答案 "。
然而,對大多數人來說,有一種方法會讓失敗的次數少很多。
在這篇文章中,我將列出一系列需要遵循的步驟,并在另一篇新文章中解釋這些步驟的原因。
概述
你只需要遵循下面的 Python 的安裝和運行策略,就可以規避許多包管理方面的問題:
不要急于安裝 Python 的最新版本
在 Windows 和 Mac 上,堅持使用 python.org 的安裝程序,在 Linux 上則使用官方倉庫。
絕對不在虛擬環境之外安裝或運行任何程序
讓自己只使用基礎的命令:pip 和 venv
執行命令時,使用 -m 參數
在創建虛擬環境時,使用命令行參數明確指定 Python 版本
不要盲目追求 Python 的最新版本
對,最新版本的 Python 總是那么閃亮奪目,性能更強,新功能特性眾多,令人心動。我并不是說你不應該去嘗試它,熟悉它。然而,對于你的項目來說,你最好不要采用這個最新版本。
因此,假設 Python 3.11 是最新的主版本,你最好使用的版本應當是 3.10,或者更舊的版本。如果可能的話(我理解沒有人希望每年都更新 Python 版本),最好將你的版本目標設定在最新主版本的前四個版本,例如在本例中,就應選擇 3.7 版本。
如果你對此有疑問,可以查看 Python 狀態頁。
在這個頁面上,"feature" 指的是當前正在開發的版本,"bugfix" 指的是仍在接收錯誤修復的版本,"security" 指的是仍在接收安全問題修復的版本,而 "end-of-line" 則代表已經停止更新的版本。
在 Windows 和 Mac 上,使用官方安裝器
安裝 Python 的方式有很多種,你選擇何種方式安裝非常關鍵。
是應該使用 Homebrew、Windows 商店,還是使用 Anaconda?答案是都不應該。
你應該直接訪問 python.org,使用他們提供的 Windows 版 Python 安裝器 或 Mac 版安裝器。
如果你想知道為什么這么做,可以查閱我寫的 另一篇文章。
如果你想了解安裝的步驟,可以參考我寫的另外一篇專門講解 講解 Python 完整安裝過程的文章。
另外,我知道有些用戶因為某些原因必須使用 Anaconda,在文末我將為你解答。
在 Linux 上,使用官方倉庫
請使用你的發行版附帶的官方工具來安裝 Python,可能是 "apt","yum","dnf" 等等。
你將受限于倉庫中的 Python 版本,但要抵制使用 pyenv 來規避這一點的誘惑。
如果恰巧你在使用 Ubuntu,你就很幸運:你可以使用 deadsnake PPA 來增加你可用的版本數。
同樣的,如果你在 Red Hat 上,可以使用 EPEL。
你可能在 Windows/Mac 上開發并在 Linux 上部署。在這種情況下,檢查 Linux 機器上可用的版本,并在 Windows 上安裝相同版本的 Python。
如果以上建議你還聽不太明白,可以查看 與這個主題的完整教程。
安裝軟件包時,堅持使用 pip
請避免使用 conda。
請避免使用 poetry、pipenv、pdm、easy_install。
同樣地,不要使用 pipx。請注意,pipx 和 pip 是兩個完全不同的工具。
不要使用像 apt、yum 等的工具。
如果你對 pip 感到陌生,或不清楚如何使用它,不用擔心,我們將在約兩周后的一篇文章中對此進行詳細講解。
總是在虛擬環境中使用 pip
正因為你正在閱讀這篇文章,也就意味著你可能尚不具備跳過此規則所需要的知識。
因此,千萬別忽視它。
這是最重要的規則。
無論你需要安裝什么,都應該在虛擬環境中進行。
不論你要安裝的是 black、jupyter、mypy,還是你目前正在考慮的任何軟件包,都應該在虛擬環境中安裝。
最關鍵的是,當你在安裝任何東西時,如果你不確定自己是否在虛擬環境中,你首先要做的就是確認你正處于虛擬環境。
如果你在安裝過程中輸入了 "--user",那么說明你并未在虛擬環境中安裝。
如果你在輸入 "sudo",你也未在虛擬環境中安裝。
一旦在虛擬環境中安裝了軟件包,為了使用它們,你需要保持在同一環境中。因此,所有的命令,包括運行 pip,都應該在虛擬環境中進行。
如果你對虛擬環境感到陌生,或者不清楚如何使用它,沒關系,我們將在后面的文章中進行詳細解析。
的確,這有點讓人感到困擾。你只是想編程,而不想被這個麻煩的虛擬環境困擾。為什么它就不能像 cargo 或 npm 那樣簡單呢?
這個問題的答案相當復雜。
但現實情況是,目前你沒有任何可靠的方法可以在沒有虛擬環境的情況下安裝任何東西。
所以你有兩個選擇:不使用虛擬環境,然后遭受各種各樣的問題;或者使用虛擬環境,只需要承受一些小小的麻煩。
只使用 "venv" 來創建虛擬環境
venv 是大部分 Python 安裝包默認附帶的命令,你應該用它來創建新的虛擬環境。
當然,還有一些其他的命令,例如 virtualenv 和 virtualenvwrapper。
你的選擇是:不用它們。
還有一些其他的工具,比如 pipx、pdm、poetry 和 pipenv。
同樣,不用它們。
顯然,anaconda 自帶了 env 子命令。
這個你應該知道:也不要用它。
此刻,那些正在使用這些工具的讀者可能已經開始心潮澎湃。請記住,關于這個話題,我們有另一篇文章。
需要注意的是,venv 是與 python.org 的 Python 安裝器捆綁在一起的,但是在 Linux 上,你可能需要安裝一個特定的包,這將是我們下周要討論的內容。
在運行 Python 命令時,添加-m參數
-m 是 "python" 命令中的一個參數,大部分用戶可能并不了解它。但是它可以讓你運行任何可導入的 Python 模塊。由于大多數命令都是 Python 模塊,因此我們可以用這個參數來指示," 運行這個特定的 python 模塊 X"。
不要這樣:
pip install
應該這樣:
python -m pip install
不要這樣:
black
應該這樣:
python -m black
不要這樣:
jupyter notebook
應該這樣:
python -m jupyter notebook
即使你在虛擬環境中,盡管有人可能會告訴你一大堆不一樣的話,你仍然應該這樣做。
的確,這很繁瑣。你只是想寫代碼,不想被這個煩人的 -m 打擾。為什么它不能像其他工具那樣開箱即用呢?
這個問題說來話長。
但是現在的情況是,你目前沒有任何可靠的方式在不使用 -m 的情況下運行任何 Python 命令。
所以,你有兩個選擇。不使用 -m,受盡困擾。或者使用 -m,只承受一點點困擾。
創建虛擬環境時,要明確所使用的 Python 版本
計算機上存在多個 Python 版本是非常常見的事,而你可能并不清楚這一情況。在創建虛擬環境時,你應該明確聲明要使用哪個 Python 版本,因為這個環境將會永久性地關聯這個特定版本的 Python。
在 Windows 系統中,這意味著使用 py 命令,它是 python.org 的安裝程序所附帶的,并可以通過以下命令列出在你的計算機上所有已安裝的 Python 版本:
py --list-paths
你可能會看到類似于下面的輸出:
-3.9 C:Python39python.exe -3.8 C:Python38python.exe * -3.7 C:Python37python.exe
然后,你可以選擇使用哪個 Python 版本,如:
py -X.Y
例如,想要運行 Python 3.7,可以輸入:
py -3.7>>> print ( "Hello" ) Hello
在 Linux 和 Mac 系統中,你需要使用帶有版本后綴的 pythonX.Y 命令。
例如,要運行 Python 3.7,可以輸入:
python3.7>>> print ( "Hello" ) Hello
如果你已經在機器上安裝了 Python,這些指令都可以為你選擇一個已經安裝在你的機器上的 Python 版本并運行。如果你還沒有裝過 Python ,是無法運行的。
請注意,如果你按照以上所有步驟進行操作,那就意味著你會同時使用 venv 和 -m。
因此,在創建虛擬環境時,你可能會輸入一些看起來很復雜的命令。
例如,Windows 系統下的命令為:
"py -3.8 -m venv .venv"
在 Linux 和 Mac 系統下,命令為:
"python3.8 -m venv .venv"
(如果這些對你來說沒有意義,我們會在另一篇文章中進行解釋)
這些命令看起來可能有些復雜,但其實這就是非常正確的做法。
這確實有些麻煩。你可能只是想編寫代碼,而不想處理這些繁瑣的步驟。我們為什么要寫一些連 Chat GPT 都不推薦的東西呢?
回答這個問題需要長篇大論。
但事實是,目前沒有任何可靠的方法可以在不做這些的情況下創建虛擬環境。
所以你有兩個選擇。一是繼續采用你的原來做法,然后飽受困擾;二是將這段復雜的命令保存在一個文件中,每次需要時復制粘貼一下,只需飽受一點點困擾。
如果你必須使用 Anaconda,該如何應對?
首先,確保你確實需要使用 Anaconda。我曾經遇到很多人誤以為他們必須使用 Anaconda,然而當他們按照上述步驟進行操作后,他們發現其實并非如此。自從 pypi 引入了 wheel 文件后,一些過去安裝起來讓人頭疼的包,比如 GUI 工具包(GUI tool-kits)或科學計算相關的包,現在的安裝過程變得輕松許多。
然而,我明白有些人是真的必須使用 Anaconda。
可能你的項目復雜且需要機器學習,或者你的公司的策略就是只使用 Anaconda。
在這種情況下,你依然可以在 Anaconda 的環境中運行。
對于所有操作,只使用 conda,僅僅使用 conda。
不要嘗試使用 pip 或 venv。尤其是,千萬不要嘗試將 conda 與其混合使用。
這樣做雖然會限制你只能使用 Anconda 渠道中的資源,但這是保持工作流程清晰的唯一方式。
對于你應該始終創建虛擬環境并在其中進行所有操作的建議仍然適用,只是這個虛擬環境需要通過 conda 來創建。
責任編輯:hnmd003
相關閱讀
-
Meta 旗下新品 Threads 已上架 APP Store,預計 7 月 6 日發布_世界速訊
品玩7月4日訊,據Deadline報道,Meta旗下的社交媒體新品Threads現已在A
2023-07-04
相關閱讀
-
天天最資訊丨如何減輕 Python 打包之痛
本文主要介紹Python包管理的問題和解決方法,以及在安裝和運行Python時
-
外媒:中國通過限制芯片制造材料出口進行反擊 天天微頭條
集微網消息,據金融時報報道,隨著中美兩個超級大國之間的地緣政治針鋒
-
世界快訊:德國法院駁回對諾基亞的專利訴訟 OPPO 回應:后續還有進一步審理
7月3日,諾基亞與OPPO之間曠日持久的專利侵權案有了新進展。諾基亞方面
-
清欠辦負責人崗位工作職責是怎么樣的?討債公司受法律保護嗎?
一、清欠公司怎么要賬要賬公司承攬討債追賬業務,不具有法律賦予的權限和強制力,一般雇請下崗、退休及...
-
A 股又有上市公司董事長被留置,市值一天暴跌 46 億!一季度凈利潤同比下降 300%
本文來源:時代周報作者:何明俊7月3日,衛寧健康(300253 SZ)發布公
-
全球快資訊:人民日報:僅約四成人覺得好用 智能客服要真服務
【CNMO新聞】7月4日,據人民日報報道,一項調查顯示,超九成的受訪者使
-
蔡徐坤“坑了” 42 家企業 業內人士稱品牌方未必都能拿到違約金|視焦點訊
本文來源:時代周報作者:許可蔡徐坤風波仍在發酵。與外界認知相反,有
-
中國專家強調西藏自古以來就是中國領土不可分割的一部分 當前速看
中國社會科學院研究員邊巴拉姆在會議發言中強調,西藏自古以來就是中國
-
我在現場·照片背后的故事丨G219西藏段:那些可愛的人 那些可敬的事
從G219國道西藏段最北端開始,“國道之行從雪山奔向大海”西藏段小分隊
-
隱私是不能亂拍的嗎?侵犯個人隱私的量刑標準是什么?
近日成都工行女的名字成網絡熱搜詞,原因是MM的一段限制級視頻在網上瘋狂流轉。女角是成都工行的一名女...
-
保險理賠計算公式是什么?什么是保險理賠?
一、保險賠付怎么算保險賠償金額計算方式為:1、在不定值保險情況下,保險賠償金額按照保障程度計算,公...
-
燕京啤酒董秘辦回應蔡徐坤事件影響!蔡徐坤跟范冰冰什么關系?
燕京啤酒董秘辦回應蔡徐坤事件影響!3日午間,蔡徐坤方對近期被爆料不軌行為等負面消息作出回應。蔡徐坤...
-
黃金投資渠道有哪些?為什么不建議買紙黃金?
黃金投資渠道有哪些?1、黃金首飾:可通過各大金店、電商平臺購買;2、紙黃金:即個人憑證式黃金,可通過...
-
深圳加班費怎么算?加班不給加班費應該怎么辦?
一、深圳加班費怎么算的深圳市加班費計算方法是:工作日加班:小時加班工資標準=勞動合同規定的月工資標...
-
個人炒黃金如何開戶?黃金開戶需要什么條件?
個人炒黃金如何開戶?1 選擇黃金:在當前的黃金投資市場上,炒黃金并非特指一種投資方式,黃金投資品種...
-
個體工商營業執照變更法人需要什么手續?城鄉個體工商戶管理暫行條例實施細則
個體工商戶在開店前,需要辦理營業執照,如果店鋪位置發生變更的,則需要辦理變更登記手續,領取新的營...
-
焦點短訊!蘭新高鐵全線恢復運行 這個夏天浪起來
今年7月1日起,蘭新高鐵全線恢復運行。其中,蘭州至西寧段實現時速250
-
重慶體育博物館征集到珍貴藏品 見證中國滑翔運動發展歷史
中新網重慶7月3日電(肖江川)3日,重慶體育博物館征集到一批珍貴藏品,
-
外國人可以在中國注冊公司嗎?外資企業的設立要求是什么?
一、外國人可以在國內注冊公司嗎外國人可以在中國注冊公司,外資企業法人代表可以是中國人也可以外國人...
-
摩根斯坦利:時代天使加速全球業務拓展 發展前景樂觀
近日,時代天使宣布其創始人、首席執行官李華敏女士辭去執行董事兼
-
與國際法庭設在什么地方有關的法律規定是什么?民事訴訟法第二百七十六條內容是什么?
一、國際法庭設在什么地方國際法庭設在荷蘭海牙。全稱是(聯合國)國際審判法院,簡稱是國際審判法院,再...
-
如何購買etf基金?一萬元etf買賣手續費多少?
如何購買etf基金?etf基金只能通過股票賬戶購買,如果已經開戶可以直接購買,沒有開戶則需要先開戶。只要...
-
多人組團偷吃榴蓮致超市損失近千元!超市買到爛榴蓮賠幾倍?
多人組團偷吃榴蓮致超市損失近千元!7月3日,在山西大同市的一家超市內,一段視頻引起了網友的關注。據視...
-
反補貼是什么意思?反補貼可以分為哪幾類?
一、什么是反補貼?補貼,是指一成員方政府或任何公共機構向某些企業提供的財政捐助以及對價格或收入的支...
-
怎樣買賣黃金?黃金交易的手續費一般多少?
怎樣買賣黃金?黃金作為貴重金屬,是不少人的收藏首選,很多人都會投資黃金。那么,怎樣買賣黃金呢?目前...
-
北京醫保存折要去哪里辦理?醫保存折里的錢能取出來嗎?
一、存折可以異地取款嗎存折可以異地取款。存折異地取款通常需要一定的條件,一般只要標注了通存通兌的...
-
綠色食品標準有哪些?食品安全的定義是什么?
一、綠色食品標準有哪些(一)綠色食品產地環境標準。分別對綠色食品產地的空氣質量、農田灌溉水質量、畜...
-
天天百事通!有望年內推出 大眾新款帕薩特諜照曝光
有望年內推出大眾新款帕薩特諜照曝光日前,車質網從相關渠道獲取了一組
-
特斯拉第二季度全球汽車交付創新高,降價策略奏效
特斯拉第二季度全球汽車交付創新高,降價策略奏效7月3日,特斯拉宣布,
-
月銷突破3萬輛!理想提前鎖定一席?
月銷突破3萬輛!理想提前鎖定一席?2023年6月,必將成為中國新造車的里
精彩推薦
閱讀排行
精彩推送
- 環球今熱點:Rivian季度交付量超...
- 電動車制造商Arrival放棄與SPAC...
- 關于發票專用章式樣有關問題的公...
- 資本積累是什么意思?資本積累和...
- 實時焦點:我市試點項目通過國家...
- 坦格斯:鄉村振興的青年先鋒 環...
- 澳大利亞免簽的國家都有哪些?澳...
- 盜竊罪一般是怎么判刑的?中華人...
- 期貨交易平臺哪里開戶?期貨開戶...
- 退休人員是2013年漲工資嗎?24省...
- 股票融資是什么意思?股票融資買...
- 牽牛花的精神品質(牽牛花的精神...
- 銀行汽車按揭貸款要多少利息?貸...
- 專家:盡快研究出臺遺贈稅!是遺...
- 個人所得稅怎么交?個人所得稅的...
- 貼水什么意思?期貨貼水好還是升...
- 培訓機構注冊流程是什么?教育培...
- 不僅美國FTC!新西蘭也稱任天堂...
- 成分股是什么意思?成分股和個股...
- 中信建投:繼續看好算力板塊
- 環球看點!傳 OpenAI 計劃推出...
- Meta 旗下新品 Threads 已上...
- 四維圖新宣布與地平線在高級輔助...
- 世界最新:蘋果的生意經:Bigger...
- 廣汽“奇葩”,埃安兇猛
- 天天最新:知名主持人名下公司,...
- 買量是什么意思?股票買量大好還...
- 超7成年輕人存款不足10萬!年輕...
- 年終獎怎么算?月薪6000年終獎一...
- 中金公司是國企還是央企?中金公...