×

在Mac正确安装Python及利用venv建立多个版本的虚拟环境

2022-01-07 17:34:40 Falcon

由于历史原因,Mac上有几个Python的版本,不但有Python2,还有Python3,而且Python3可以安装多个版本。为了方便开发,我也不想去捣鼓pyenv和virtul-env,这里提供一个Python自带的功能,加上一些简单的操作。做出一套还算灵活的虚拟环境。

这里以建立一个python3.10的虚拟环境为例。

1. 校正Python版本

首先从官网下载安装包,Mac的安装包是一个“python-3.10.1-macos11.pkg”的文件,按照图形界面的安装指南安装完成之后。 安装位置应该在“/Library/Frameworks/Python.framework/Versions/3.10” 运行

which -a python3

发现有两个python3:

#刚才安装的最新版本,Current是3.10目录的链接
/usr/local/bin/python3 -> /Library/Frameworks/Python.framework/Versions/Current/bin/python3

#Xcode 里的Python 3.7
/usr/bin/python3 -> /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/bin/python3

  此外,还有旧版本的Python3.6和Python2.7

总结一下,各个版本的目录位置如下:

#最新版本Python3.10.1
/Library/Frameworks/Python.framework/Versions/Current/
或者/Library/Frameworks/Python.framework/Versions/3.10/

#Xcode里的Python3.7
/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7

#旧版本Python3.6
/Library/Frameworks/Python.framework/Versions/3.6/

#系统自带的Python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7

为了减少混淆,我把/usr/bin/python3由Xcode的3.7改成当前版本3.10,另外也不需要/usr/local/bin/python3, 也就是把/usr/local/bin/python3移过去替换掉/usr/bin/python3,但Mac的/usr/bin目录是是read-only的,报错。

override rwxr-xr-x  root/wheel restricted,compressed for /usr/bin/python3? y
rm: /usr/bin/python3: Read-only file system

需要这样操作:

sudo mount -uw /
sudo mv /usr/local/bin/python3 /usr/bin/python3

重新开启终端,现在应该只有一个Python3了,并且指向3.10.1 版本

$ which -a python3
/usr/bin/python3

$ python3 -V
Python 3.10.1

2. 建立虚拟环境

#以当前3.10.1建立一个虚拟环境
cd /Users/falcon/projects/python
python3 -m venv py3.10

也可以指定一个别的Python版本建立虚拟环境,但必须指定 python的完整路径,如以Python3.6为例:

cd /Users/falcon/projects/python
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 -m venv py3.6

3.使用及退出

我写了几个别名放在 ~/.zshrc

alias py2="source /Users/falcon/projects/python/py2env/bin/activate"
alias py310="source /Users/falcon/projects/python/py3.10/bin/activate"
alias py36="source /Users/falcon/projects/python/py3.6/bin/activate"
alias leave="deactivate"
alias py3=py310

使用 py3 切换到3.10, py36切换到 3.6,使用leave退出

$ py3
(py3.10)
# falcon @ FalconPro in ~/projects/python [18:05:32]
$ leave

检查当前 Python 所在的路径

$ which python
/Users/falcon/projects/python/py3.10/bin/python
(py3.10)

注意,进入虚拟环境后,安装的Packages会在虚拟环境的目录下。如进入py3.10环境

(py3.10)
pip install ipython
#...
# ipython in /Users/falcon/projects/python/py3.10/lib/python3.10/site-packages (7.31.0)

 

本文收录于