Homebrew python 优先于 venv python

问题描述 投票:0回答:1

我有一些与Python路径相关的问题。我使用 homebrew 在我的 Mac 上安装 python3:

# homebrew python
> which -a python
python: aliased to /usr/local/bin/python3.9

# system python
❯ which -a python3
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
/usr/local/bin/python3
/usr/bin/python3
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

然后我使用命令

python -m venv venv
设置虚拟环境。激活后,我得到:

> which -a python
python: aliased to /usr/local/bin/python3.9
/Users/kshitijsachan/Documents/venv/bin/python

> which -a python3
/Users/kshitijsachan/Documents/venv/bin/python3
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
/usr/local/bin/python3
/usr/bin/python3
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

我的问题是:

  1. 当我在激活 venv 的情况下运行
    which -a python
    时,为什么 homebrew python 优先于 venv python?
  2. 为什么
    /Library/Frameworks/Python.framework/Versions/3.7/bin/python3
    which -a python3
    下列出两次?
  3. 这是 venv 与 Homebrew python 的规范设置吗?
python-3.x homebrew python-venv
1个回答
0
投票
  1. 我认为 Homebrew 不会自动为您添加
    python
    别名。您可能自己更改了
    .bashrc
    文件或其他内容。
python: aliased to /usr/local/bin/python3.9

此行显示

python
/usr/local/bin/python3.9
的别名。 Python venv 仅更改
PATH
变量,而别名始终位于
PATH
之前,因此您将无法获得正确的 Python 版本。

要解决此问题,请使用命令

unalias python
在当前会话中取消绑定别名。另外,检查您的
.bashrc
文件(对于 MacOS zsh 终端为
.zsh_profile
),然后删除相应的行。应该是这样的

alias python='/usr/local/bin/python3.9'

但请注意,在执行

unalias
后,您应该使用
python3
(甚至特定版本的
python3.x
)而不是
python
python
命令可能默认引用Python2,具体取决于您的操作系统。

  1. 不确定是什么原因导致这种现象。我的输出看起来像:
(.venv) $ which -a python3
.../test/.venv/bin/python3
/opt/homebrew/anaconda3/bin/python3
/Library/Frameworks/Python.framework/Versions/3.12/bin/python3
/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
/opt/homebrew/bin/python3
/usr/local/bin/python3
/usr/bin/python3
  1. 是的,
    venv
    是创建虚拟环境的官方工具。
python3 -m venv .venv  # create virtual env in .venv/
source .venv/bin/activate  # activate environment

上面的两个命令经常用于创建和激活虚拟环境。

© www.soinside.com 2019 - 2024. All rights reserved.