Skip to content

Latest commit

 

History

History
96 lines (61 loc) · 4.85 KB

File metadata and controls

96 lines (61 loc) · 4.85 KB

一般開發會先用 conda 開出一個 base env,然後在自己的專案下開 venv 或是 poetry 的環境來使用 (這部分就看喜好,也可以挑別的想用的)。

conda 開新的 env 主要是非 Windows 的系統中,常會 OS 內自帶了一組 Python 環境了,它跟系統內的一些管理工具是相關的。如果開發時裝的一些函式庫相衝時,想要重裝有可能不小心弄壞了系統預設的那組。

因此,我們常會在開專案之前的環境,先準備 conda env。而 conda env 很方便可以準備不同版本的 Python 基礎環境。像我自己的就有多組環境:

$ conda env list
# conda environments:
#
base                  *  /Users/qrtt1/miniforge3
osx-arm64                /Users/qrtt1/miniforge3/envs/osx-arm64
py311                    /Users/qrtt1/miniforge3/envs/py311
py38                     /Users/qrtt1/miniforge3/envs/py38
                         /Users/qrtt1/opt/anaconda3/envs/osx-arm64

即使你是在 Windows 下開發,也很鼓勵使用 conda 作為基礎環境。同樣的,記得在開新專案或執行時,得用到正確的 Python 執譯器就是了。

查詢 Python 環境

以 OSX 或 Linux 相容的環境來說,有簡單的 command 指令可以指出現在用哪一個 Python

$ command -v python
/Users/qrtt1/miniforge3/bin/python

如果是 Windows 使用者,你就去問一下 ChatGPT 怎麼查唄。

在啟用 venv 的情境下,它會 clone 一份迷你的環境至指定安裝的 venv 目錄 (你按裝時自己指定的)

$ (venv) piperider git:(feature/sc-31723/cli-show-stats) command -v python
/Users/qrtt1/temp/piperider/venv/bin/python

近年也流行使用 poetry 來管理專案的 Python 環境,但這就先以 venv 為例。多數的 IDE 或開發環境都可以讓你指定 Python 環境的位置,但 vscode 預設是認 .venv 如果你不是用這個,記得去改設定讓它自動抓得到 venv 或直接指定 python 指令的路徑。

而所謂的 IDE 能認出 venv 或是其它的 Python 環境管理工具,並不是它真的得知道 你使用了什麼開發環境管理工具 而是它透過不同工具的「安裝慣例」去自動搜尋 python 指令的位置。

找到這個位置是最重要的事,因為 Python Package 的搜尋路徑 (PYTHONPATH 變數可以追加新位置) 都是以它的位置推算出來的。

查看目前的搜尋路徑

知道如何查看目前的 Python 會去查訪哪些路徑是重要的,因為

當你覺得自己安裝好了函式庫 foo.bar 後,但你的 Python 一直跟你說它找不到 foo.bar 時。

非常有可能,你安裝函式庫的 Python 環境,與你「執行時」的 Python 環境是不同一個。

在 Python 內查詢搜尋路徑

$ python
Python 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:41:22) [Clang 13.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/Users/qrtt1/miniforge3/lib/python310.zip', '/Users/qrtt1/miniforge3/lib/python3.10', '/Users/qrtt1/miniforge3/lib/python3.10/lib-dynload', '/Users/qrtt1/miniforge3/lib/python3.10/site-packages']
>>>

用上面可以知道,我執行 python 指令,去列出它目前的搜尋位置。其中的 '' 空字串為 現在執行目錄,可以推測使用的是單純的 conda 預設環境。那麼,我啟用了 venv 後,你會看到路徑有了點變化,多了 venv 的部分:

$ (venv) piperider git:(feature/sc-31723/cli-show-stats) python
Python 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:41:22) [Clang 13.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/Users/qrtt1/miniforge3/lib/python310.zip', '/Users/qrtt1/miniforge3/lib/python3.10', '/Users/qrtt1/miniforge3/lib/python3.10/lib-dynload', '/Users/qrtt1/temp/piperider/venv/lib/python3.10/site-packages']
>>>

我們透過純 conda 環境,與在 conda 環境下再進入個別專案的 venv 可以觀察到「搜尋路徑」是不同的。所以,你在 venv 安裝的函式庫在 conda 下是「看不到的」。除非,你在 conda 下又安裝一次,但這通常不是個好主意。

因為特定建了一個 venv 就是要避免去污染 conda 下的套件,我們不會特定把個別專案用的函式庫去安裝在 conda 環境上。除非,你很確定「其它專案」也都需要用到。

相關資源


在 PyCharm 中,只要確認 Python 直譯器的位置是對的就行了,不太有設定的需求。