背景
早年看廖雪峰老师的Python教程,说要安装python解释器,那个时候对命令行,虚拟环境之类的根本都没概念,并且当时并不知道Mac系统自带python解释器。所以,直接去官网安装了官方解释器。在命令行下执行python文件。
之后用Pycharm的IDE,每次在新建项目选择python解释器的时候都一头雾水,选也选不到正确的路径,都是泪。
后来为了学习数值计算的课程,安装了anaconda,有了很多anaconda的环境。
有了brew之后,更乱了。
因此下定决心捋一捋自己python解释器路径。
系统中可能存在的Python环境、解释器路径
参考
macOS 上如何切换默认的 Python 版本? - Steven Liu的回答 - 知乎
Install, Uninstall, and Manage Multiple Versions of Python on a Mac
系统自带的/usr/bin/python
Mac系统自带的Python环境的具体依赖为/System/Library/Frameworks/Python.framework/Versions/2.7
,对应的解释器就在该目录下的./bin/python2.7
。但是Comand Line Tool会在/user/bin/python
下去运行这个环境,前后着之间的关系应该是软连接symlink。
不要删除!系统的功能实现依赖于这些框架。
系统自带的/usr/bin/python3
参考StackOverflow的回答:Python 3.7.3 Inadvertently Installed on Mac OS 10.15.1 - Included in Xcode Developer Tools 11.2 Now?
可以看到/usr/bin/python3
(此处是具体的依赖/可执行对象),不是映射或者替身。
但是/usr/bin/python
是一个symlink,指向的具体可执行文件的位置是/System/Library/Frameworks/Python.framework/Versions/2.7
。
注意区别这二者的关系。
关于commandlinetools下的python文件
同时在/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework
中可以找到替身,在/Applications/Xcode.app/Contents/Developer/us r/bin/python3
可以找到python3以及python3.8指向python3.framework。
这几个文件的最终指向都存在于/Applications/Xcode.app/Contents/Developer//Library/Frameworks/Python3.framework/Versions/3.8/Python3
这个目录下。
brew安装的环境
参考
Mac 下 Python 环境总结 ( 非 Anaconda)
homebrew Cellar文件夹下安装的Python解释器
如何查看brew所在目录?在终端输入
brew -—prefix
,会返回/usr/local
,这也就解释了为什么以下的路径都是以此开头。
通过homebrew安装python环境的安装路径为/usr/local/Cellar/
,brew里install的brew里uninstall。
可以在终端输入brew list
来显示安装了哪些包,输入open /usr/local/Cellar/
在finder中查看。一般来说在/usr/local/Cellar/
中安装的包,brew都会自动地在/usr/local/bin/
中添加symlink。
但是我自己在查看/usr/local/bin/
中有执行环境的时候并没有找到对应的可执行文件。于是尝试在终端执行brew install python@3.9
,返回了一个warning:
1 | Warning: python@3.9 3.9.1_1 is already installed, it's just not linked You can use `brew link python@3.9` to link this version. |
在终端输入brew link python@3.9
后,发现/usr/local/bin/
中出现了python3.9的symlink。
在此进入/usr/local/Cellar/python@3.9
发现有两个文件夹,应该对应了不同的子版本。
尝试进入其中某一个,查看bin文件夹下的二进制文件。
可以看到bin文件夹下的替身都是最终指向/user/local/Cellar/Frameworks/Python.framework/Versions/3.9
的文件夹下的可执行文件。
对比系统自带的python路径/System/Library/Frameworks/Python.framework/Versions/2.7
,就可以发现除了Prefix有所不同,从/Framework开始路径都是相同的。只是前缀不同,一个是/Systems/Library
,另一个是/usr/local
。
接下来尝试进入/user/local
可以得到如下结构,我们可以看到还有一个Framework
文件夹,进入查看内容。
可以发现进入这个目录之后还是Python.frameworks,继续深入又可以看见Versions版本号。
最重要的是,这里的Python指向的还是homebrew的Cellar文件夹中安装的Python解释器。
anaconda安装的环境
用户安装anconda3后,anaconda自带默认的python环境base为/Users/drunk99/anaconda3
,对应的解释器就在该目录下的./bin/python
。
如果用户建立了其他anaconda的环境,如名称为myenv,那么python环境为/Users/drunk99/anaconda3/envs/myenv
,对应的解释器就是该目录下的./bin/python
。
anaconda会自动把路径配置到~/.zshrc
文件中,无需手动添加路径。
官网pkg安装环境
通过官网pkg安装的环境,也就是用户安装的python环境为/Library/Frameworks/Python.framework/Versions/3.7
。
对应的解释器就在该目录下的./bin/python3.7
参考CSDN上的卸载教程,以及知乎专栏的安装教程。
分为三步骤。
第一步:删除框架sudo rm -rf /Library/Frameworks/Python.framework/Versions/x.x
第二步:删除目录应用sudo rm -rf "/Applications/Python x.x"
第三步:删除指向Python的连接cd /usr/local/bin/
ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/x.x' | awk '{print $9}' | tr -d @ | xargs rm
第四步:在zshrc配置文件中删除python环境路径sudo vim ~/.zshrc
进入配置文件,在命令模式下按下dd
删除当前光标所在行。退出保存即可。
总结
- 不要随意变动或者使用
/usr/bin
下的可执行文件或者是软连接,包括该软连接指向的可执行文件。 - 很多情况下并不需要自己再去python.org官网去下载解释器,使用包管理工具更方便。
- 在有了anaconda以及homebrew的python包管理工具后,需要区别二者环境。在conda和brew的默认python环境之上,还有可能会有多个虚拟环境,注意区分。
可能需要用到的终端语句
查看symlink
查看目标文件是否是替身、是否指向哪个具体的可执行文件:ls -l /usr/bin/python
。
这句话的意思是,hey终端,给我ls/list以下/usr/bin/python这个路径的文件指向哪个-l/link。
从终端打开finder
在finder中查看当前目录的文件:open .
。这句话的意思是,hey终端,给我从finder中打开当前路径。
如果想指定位置,可是输入绝对路径open /System/Library/Frameworks/Python.framework/Versions/2.7
。
查看/修改系统级环境变量
列出系统内置的环境变量的文件:cat /etc/paths
,如果要改动各种路径的默认顺序,使用sudo vim /etc/paths
操作。注意,这是系统级环境变量,路径以/etc开始。
查看/修改用户级环境变量
查看当前用户级配置好的变量:echo $PATH
。
修改用户环境变量,只需要修改~/.zshrc
或者~/.bashrc
(看用哪个shell),sudo vim ~./zshrc
进入修改界面。
在文件最底端添加export PATH="/usr/local/bin:$PATH"
,每一个系统变量都是用:
分隔开来的。这句话的意思是,hey终端,帮我把/usr/local/bin
的添加到原来$PATH
变量的前面,并且作为用户级的新$PATH,搜索路径的时候最先搜索它。
详细请参考macOS/Linux 环境变量设置
- 本文标题:macOS上的Python解释器与执行环境
- 本文作者:徐徐
- 创建时间:2021-01-25 21:01:06
- 本文链接:https://machacroissant.github.io/2021/01/25/python-envs/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!