去哪里找sklearn的源码

我使用的python版本:python3.7.5 环境:pycharm

学习sklearn时想要看看决策树部分的源码,结果发现找不到包含源代码的.pyx文件。

在sklearn中,底层代码是由cpython编写的。cpython生成的文件格式主要有三种:.pxd .pyd .pyx

  • .pxd 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块头文件,其中有 Cython 模块要包含的 Cython 声明 (或代码段),还可为 .pyx 文件模块提供 Cython 接口。
  • .pyx 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块源代码文件,其中有 Cython 模块的源代码。不像 Python 语言可直接解释使用的 .py 文件,.pyx 文件必须先被编译成 .c 文件,再编译成 .pyd (Windows 平台) 或 .so (Linux平台) 文件,才可作为模块 import 导入使用。
  • .pyd 文件是非 Python,由其它编程语言 “编写-编译” 生成的 Python 扩展模块, Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。

以下是我遇到问题和解决问题的过程:

在项目中找到了venv/Lib/site-packages/sklearn/tree 文件夹,如图:
去哪里找sklearn的源码

可见,这里只有.pxd文件和.pyd文件,没有源代码文件.pyx。
查看_tree.pxd文件,可见决策树中一些结构的声明,但具体编写实现的代码应在_tree.pyx文件中。
去哪里找sklearn的源码
那么_tree.pxd文件在哪呢。
我在python的安装目录下,项目的目录下都没有找到。

问题的解决

最终我在github上sklearn的官方开源项目里找到了完整的源代码。
去哪里找sklearn的源码
分析得,我们在导入sklearn库时,直接导入了编译转换好的,能为python所使用的.pyd文件,而不是cpython所写成的源代码.pyx。