安装 scikit-learn 时就地构建扩展有什么好处?

What's the advantage of building extensions inplace when installing scikit-learn?

我正在尝试安装 scikit-learn 的开发版本。这是 document:

中关于它的声明

If you run the development version, it is cumbersome to reinstall the package each time you update the sources. It is thus preferred that you add the scikit-learn directory to your PYTHONPATH and build the extension in place:

python setup.py build_ext --inplace

我不太明白这条指令。据我所知, --inplace 选项是将构建的文件放入与纯 python 模块相同的目录中。它与避免重新安装有什么关系?

假设您在 scikit-learn 目录中有 scikit-learn 发行版

git clone https://github.com/scikit-learn/scikit-learn.git
cd scikit-learn

您对重新安装的引用意味着当您 运行:

python setup.py install

安装脚本构建 pyx 文件,运行s 测试并将所有文件复制到 OS 的某个系统文件夹中。假设您想修复 scikit-learn 包中的一些错误,或添加新功能。你会怎么做? scikit-learn 中的项目对安装脚本安装到某个位置的文件没有任何影响,因此如果您更改 scikit-learn 文件夹中的这些文件并从终端导入 sklearn - 您将导入未更改的文件(因为您导入文件不是来自那个 scikit-learn 目录,而是来自某些 OS 目录)。

如果你想用最近修改过的源代码导入 sklearn - 你可以通过 3 种方式实现:

  1. 运行 python setup.py install每次修改scikit-learn库文件后,但是很繁琐

  2. 修改 OS 目录(安装 scikit-learn 的目录)中的库文件,但它通常需要管理员权限,如果你破坏它 - 你破坏了可能使用的库通过您系统中的其他脚本。

  3. 按照您在问题中提到的那样就地构建它,然后您可以进入 scikit-learn 源文件夹和 运行 import sklearn,它将从当前导入库文件夹,以及您所做的任何修改。 (但是如果没有 运行ning build_ext --inplace 之前你不能做这样的导入)

Look also 'develop' mode