[英]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
您不希望pip
和python
匹配(即來自同一個地方),並且pip3
和python3
也匹配嗎? 為什么都亂七八糟的?
我知道這不是最重要的。 我應該小心並確保我調用了正確的方法,例如,當我執行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.