Python下的文件目录

基本介绍

经常好奇,当 PC 上安装了 Python 之后到底是多出了哪些东西,查阅了 Python 官方文档1,给出的回答如下:

What you get after installing

简单总结一下,安装了 Python 之后,主要多出了以下三个部分:

  • 官方配的一个标准开发环境:IDEL
  • 处理 Python 脚本的工具:PythonLauncher2
  • 一个框架(Frameworks/Python.framework):包括 Python 可执行文件和标准库

同时,文档也指出,要想删除 Python ,其实只需简单将上面三个东西删除即可。

虽然,官方文档是这么说的,但是,也要亲自验证一下,实际情况是否如文档所说的那样。

安装 Python

这里先简单的列一下用到的环境:

  • 操作系统(OS):Ventura 13.4
  • 工具:Homebrew 4.0.3-103-gd7029e9

安装 Python 的方式有很多种,这里选择最熟悉的方式,通过 Homebrew 进行安装 3.11 版本的 Python:

brew install [email protected]

安装完成之后,查询 [email protected] 的相关信息:

获得了以下关于 [email protected] 用的信息:

  • [email protected] 的安装路径:/usr/local/Cellar/[email protected]/3.11.3
  • 创建了符号连接:/usr/local/bin/python3,说明可以直接在终端通过 python3 命令使用 Python
  • 可以通过 pip3 安装第三方库
    • 安装命令:pip3 install <package>
    • 第三方库被安装的位置:/usr/local/lib/python3.11/site-packages

所以,下一步的目标是看看 [email protected] 的安装路径下,是不是正如前面所说的那样,最主要就是那三样东西。

Python 的主要文件

通过 tree 命令,看一看 [email protected] 的安装路径下的文件树:

tree -L 3 /usr/local/Cellar/[email protected]/3.11.3

显示的结果如下:

/usr/local/Cellar/[email protected]/3.11.3
├── Frameworks
│   └── Python.framework
│       ├── Headers -> Versions/Current/Headers
│       ├── Python -> Versions/Current/Python
│       ├── Resources -> Versions/Current/Resources
│       └── Versions
├── IDLE 3.app
│   └── Contents
│       ├── Info.plist
│       ├── MacOS
│       ├── PkgInfo
│       └── Resources
├── INSTALL_RECEIPT.json
├── LICENSE
├── Python Launcher 3.app
│   └── Contents
│       ├── Info.plist
│       ├── MacOS
│       └── Resources
├── README.rst
├── bin
│   ├── 2to3 -> ../Frameworks/Python.framework/Versions/3.11/bin/2to3
│   ├── 2to3-3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/2to3-3.11
│   ├── idle3 -> ../Frameworks/Python.framework/Versions/3.11/bin/idle3
│   ├── idle3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/idle3.11
│   ├── pip3
│   ├── pip3.11
│   ├── pydoc3 -> ../Frameworks/Python.framework/Versions/3.11/bin/pydoc3
│   ├── pydoc3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/pydoc3.11
│   ├── python3 -> ../Frameworks/Python.framework/Versions/3.11/bin/python3
│   ├── python3-config -> ../Frameworks/Python.framework/Versions/3.11/bin/python3-config
│   ├── python3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/python3.11
│   ├── python3.11-config -> ../Frameworks/Python.framework/Versions/3.11/bin/python3.11-config
│   ├── wheel3 -> wheel3.11
│   └── wheel3.11
├── lib
│   └── pkgconfig
│       ├── python-3.11-embed.pc -> ../../Frameworks/Python.framework/Versions/3.11/lib/pkgconfig/python-3.11-embed.pc
│       ├── python-3.11.pc -> ../../Frameworks/Python.framework/Versions/3.11/lib/pkgconfig/python-3.11.pc
│       ├── python3-embed.pc -> ../../Frameworks/Python.framework/Versions/3.11/lib/pkgconfig/python3-embed.pc
│       └── python3.pc -> ../../Frameworks/Python.framework/Versions/3.11/lib/pkgconfig/python3.pc
├── libexec
│   ├── bin
│   │   ├── idle -> ../../Frameworks/Python.framework/Versions/3.11/bin/idle3.11
│   │   ├── pip -> ../../bin/pip3.11
│   │   ├── pydoc -> ../../Frameworks/Python.framework/Versions/3.11/bin/pydoc3.11
│   │   ├── python -> ../../Frameworks/Python.framework/Versions/3.11/bin/python3.11
│   │   ├── python-config -> ../../Frameworks/Python.framework/Versions/3.11/bin/python3.11-config
│   │   └── wheel -> ../../bin/wheel3.11
│   └── wheel-0.40.0-py3-none-any.whl
└── share
    └── man
        └── man1

22 directories, 32 files

可以发现,结果正如前面官方文档所说的那样(官方诚不欺我,hh),安装 Python 之后得到的最主要的三样东西:

  • IDLE 3.app
  • Python Launcher 3.app
  • Frameworks/Python.framework

之于其它的一些文件,大多都是一些符号链接文件,基本都指向 Frameworks/Python.framework 目录下的文件。

再进一步观察一下,Frameworks/Python.framework 目录下由哪些主要的文件组成:

tree -L 3 /usr/local/Cellar/[email protected]/3.11.3/Frameworks/Python.framework/Versions/3.11

具体显示如下(由于展开的文件太多,只能展示部分,剩下的用 “······” 替代):

/usr/local/Cellar/[email protected]/3.11.3/Frameworks/Python.framework/Versions/3.11
├── Headers -> include/python3.11
├── Python
├── Resources
│   ├── Info.plist
│   └── Python.app
│       └── Contents
├── bin
│   ├── 2to3 -> 2to3-3.11
│   ├── 2to3-3.11
│   ├── idle3 -> idle3.11
│   ├── idle3.11
│   ├── pip3
│   ├── pip3.11
│   ├── pydoc3 -> pydoc3.11
│   ├── pydoc3.11
│   ├── python3 -> python3.11
│   ├── python3-config -> python3.11-config
│   ├── python3.11
│   └── python3.11-config
├── include
│   └── python3.11
│       ├── Python.h
│       ├── abstract.h
│       ├── bltinmodule.h
│       ├── cpython
│       └── ......
├── lib
│   ├── libpython3.11.dylib -> ../Python
│   ├── pkgconfig
│   │   ├── python-3.11-embed.pc
│   │   ├── python-3.11.pc
│   │   ├── python3-embed.pc -> python-3.11-embed.pc
│   │   └── python3.pc -> python-3.11.pc
│   └── python3.11
│       ├── LICENSE.txt
│       ├── __future__.py
│       ├── __hello__.py
│       ├── __phello__
│       ├── __pycache__
│       ├── antigravity.py
│       ├── argparse.py
│       ├── ensurepip
│       ├── site-packages -> ../../../../../../../../../lib/python3.11/site-packages
│       ├── site.py
│       └── ......
└── share
    └── doc
        └── python3.11

53 directories, 263 files

可以发现,其实就是主要由三大部分组成:

  • bin
  • lib
  • include

其中,binlib 就是前面提到的 Python 可执行文件和标准库,而至于 include 基本上都是一堆头文件,但是在众多头文件中看到了一个熟悉的身影 cpython,可以简单猜测一下 include 可能是 Python 解释器 cpython 需要的头文件(毕竟,cpython 使用 C 语言写的嘛)。

后记

了解 Python 安装之后的文件目录,对于理解 Python 的运作机理还是起到了一的作用,从 Python 的文件目录,可以大概想想一个编程语言的最主要的部分其实也就三个(也没准是管中窥豹,hh):

  • 首先,既然你定一个一套语法,自然需要一个东西去把它翻译出来,因为机器可不认你的那套语法,所以自然就会有解释器/编译器;
  • 其次,为了让你的语言能够用较少的代码实现一些基本的功能,自然需要自带一些库文件了;
  • 最后,真正使得一个语言能够蓬勃发展,还得靠社区的朋友们群策群力,自然少不了一些第三方库,而与第三方库相关的就是一些分发和管理的问题

参考

标签:

分类:

更新时间:

留下评论