簡體   English   中英

pip 和 python 指的是不同的口譯員

[英]pip and python referring to different interpreters

我知道“multiple-versions-of-python-mess”並不是什么新鮮事,但我的問題更具體。 我正在學習如何使用 venv(和 pyenv 等),但遇到了一個奇怪的情況。

我安裝了許多不同版本的 python(就像一個版本一樣)。 我使用其中之一,3.9,來創建一個 venv:

$ /usr/local/Cellar/python@3.9/3.9.12_1/bin/python3 -m venv ./venvpractice

然后我激活它:

cd venvpractice
$ source bin/activate

這是“麻煩”開始的地方:

(venvpractice) $ which python
~/venvpractice/bin/python

(venvpractice) $ which python3
python3: aliased to /usr/local/bin/python3

(venvpractice) $ which pip
pip: aliased to /usr/local/bin/pip3

(venvpractice) $ which pip3
~/venvpractice/bin/pip3

您不希望pippython匹配(即來自同一個地方),並且pip3python3也匹配嗎? 為什么都亂七八糟的?

我知道這不是最重要的。 我應該小心並確保我調用了正確的方法,例如,當我執行pip3 freeze > requirements.txt時。 但我只想了解幕后發生的事情。 我覺得事情仍然一團糟。 pyenv /.zshrc我也用它做了一些實驗……

請幫忙?!

venv不會為你unalias 如果你有別名,你的 shell 在venv的東西甚至有機會之前解釋那些。

我的簡單建議是從 shell 的啟動文件中刪除這些別名,或者至少暫時以交互unalias它們的別名。

如果您需要別名,請嘗試類似

alias python3='env python3'

這應該在虛擬環境中和虛擬環境中做正確的事情(前提是您的PATH適度理智,並且您有/usr/local/bin/python3指向/usr/local/bin/python )。

(盡管在其他新聞中,別名不如 shell 函數。對於這個簡單的案例,mmmmmaybe 可以使用別名。)

稍微復雜一點的 function 可能看起來像

python () {
    case ${VIRTUAL_ENV-} in
      '') /usr/local/bin/python "$@" ;;
      *) command python "$@";;
    esac
}

但最終,如果你無論如何都在使用pyenv ,可能只是讓開它,讓它為你處理這些事情; 它做得很好而且透明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM