检查Python软件包是否需要Visual Studio构建工具

时间:2018-12-31 06:24:08

标签: python dependencies build-tools

this previous SO question开始,我了解到某些python软件包依赖Visual Studio Build Tools来编译Windows上C语言的源代码。

我想避免在我的开源项目中使用需要Visual Studio构建工具的python包。我不想强迫我的开源用户为我的python应用安装Build Tools。这似乎使可用性大大降低,并使安装更加困难。

如何确定哪些开源python软件包需要Visual Studio Build Tools?我已经检查了pypi.org和library.io,并查看了其中的requirements.txt软件包的GitHub存储库。我找不到Visual Studio Build Tools的任何要求,但是当我在包装上尝试pip install时,它说它需要Build Tools ...

我确实从另一篇SO帖子中找到了this website of pre-compiled python libraries。是否可以安全地假定此列表中的任何库都需要构建工具?但是,我假设此列表并不详尽。有更好的信息来源吗?

请注意,我并不是在问如何安装Visual Studio Build Tools。预先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我在Reddit上发布了此内容,并收到了以下答案,我认为这是正确的。如有需要,随时添加另一个答案。

  

基本上,答案是任何时候包都必须编译C代码才能构建。在查看软件包要求方面并不太明显,因为安装工具提供的构建命令会自动在Windows上查找Visual Studio。

     

在distutils配置文件中,可以设置您选择的编译器:https://docs.python.org/3/install/index.html#using-non-microsoft-compilers-on-windows。然后,通过pip安装时,您可以选择--no-binary选项,以确保不会得到Visual Studio预先编译的二进制文件:https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-no-binary

     

您可能还对conda-forge感兴趣,它提供了一种通过conda软件包管理器提供许多软件包二进制文件的开源方式:https://conda-forge.org/

关注是否有任何方法可以检测任意python包中编译器的使用情况:

  

我假设很多软件包在setup.py的某个时刻都会调用distutils.core.Extension:https://docs.python.org/3/extending/building.html#building-c-and-c-extensions-with-distutils

     

尽管setup.py允许您调用任意Python代码,所以实际的C编译可能隐藏在完全不同的地方,甚至使用完全不同的构建过程。

     

基本上,如果许可或遵守FOSS原则对您的应用程序很重要,则您需要将依赖链建立在其他人已经完成的工作(例如conda-forge)上,或者您需要花费时间来认真研究每个组件的状态您使用的依赖项:/