这是关于在Windows机器上编译Cython模块(或类似的内置Python模块,例如PYD文件(,而不使用付费的Microsoft Visual Studio许可证:
我尝试了许多不同的解决方案,从安装minGW到安装windows SDK,都没有成功。
有什么可行的解决方案可以在Windows 10上编译Python3.9代码吗?无需支付Visual Studio许可证费用?
简单的解决方案是安装Visual Studio,但由于它是用于商业用途的,我无法使用社区版本,所以我正在寻找替代方案。
由于您想在不授权Microsoft build Tools的情况下为商业目的进行构建,因此应该考虑使用兼容的clang-cl.exe
以及兼容的链接器lld-link.exe
-使用这些LLVM工具生成的Python PYD文件,我发现这些文件100%有效。现在安装它们最简单的方法是使用MS构建工具,但这确实是为了方便。在我的副本(Visual Studio Build Tools 2019(上,它被列为选项:;用于Windows的C++Clang Tools";并配有Clang 12.0.0。尽管微软不能仅仅捆绑LLVM工具并更改其许可证,即Apache license 2.0,但它确实允许商业使用。所以我不是一名律师,但我可以肯定,只使用LLVM(Clang(可以绕过任何微软许可证。
现在这样做有点像黑客,但你可以编辑(在Windows上([Python]/Lib/site-packages/setuptools/_distutils/_msvccompiler.py
,现在找到link.exe
并用lld-link.exe
替换,并注释掉ldflags
选项'/LTCG'
,因为LLVM链接器会在这方面抛出错误。在某些安装中,目录实际上是:[Python]/Lib/distutils/_msvccompiler.py
,因此您必须检查您的设置才能做出决定。我有两个完全相同的Anaconda安装,这让我很反感,因为他们在使用setuptools
和distutils
之间随机切换。现在,当您使用clang-cl.exe
构建时,链接器也将默认为lld-link.exe
,并且您绕过了任何不友好的许可证。注意:我使用的是Pythran,它允许我将clang-cl
设置为默认值;如果你的设置没有,你也可以破解这个相同的文件_msvccompiler.py
,用clang-cl.exe
代替cl.exe
,它会改变编译器。注意:在Windows上编译通常需要运行Visual Studio批处理文件vsvarsall.bat x64
来正确设置路径,该文件在我的电脑上位于:C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuild
我没有说这非常容易,但理论上可以安装MS Build Tools 2019并添加Clang Tools,只需最少的努力即可完成。事实上,我很惊讶整个WindowsPython生态系统还没有将clang-cl
和lld-link
作为所有构建的默认值,因为它们至少从Clang-12开始就兼容了。。。我已经看到整个NumPy和SciPy构建使用它,在它们的测试套件中没有任何错误。。。
希望这会有所帮助。我用Pythran软件包在Win10上制作PYD文件,这一切都是我想出来的——它没有适合Windows用户的好文档。在你提出问题之前,我从未真正考虑过许可证的后果。我留下这个";解决方案";我自己也一样。