我正在为plex媒体服务器开发插件。 Plex使用Python 2.7作为插件系统。我需要使用python-levenshtein软件包,该软件包需要针对不同的系统进行编译。
我找到了python-Levenshtein轮子(许多Linux,macos,arm,windows),但是Windows轮子是用VS 2008编译的(msvcr90.dll)。并将plex嵌入使用VS 2013(msvcr130.dll)编译的python。
在Windows 10上,如何使用不同的VS运行时编译python软件包?
答案 0 :(得分:0)
注意::Python团队不支持官方版本以外的其他Python版本的编译扩展,该产品必须受产品支持-在这种情况下为Plex。因此,假设Plex没有提供执行此操作的方法,则下面的内容都是黑客和变通方法。
此外,如果库开发人员未在进行构建,则您将尝试对其进行介绍,这意味着您基本上处于其“水平”,并且需要与他们一样了解他们的代码。欢迎使用开源软件:)
最后,这仅适用于旧版Python2。如果使用Python 3.5或更高版本的人阅读,请安装最新的Visual Studio并使用最新的编译器-整个14.x行都兼容,并且可以使用可以使用最新的Python版本。
假设您对扩展与C运行时的交互方式非常谨慎,通常可以根据“错误的” C运行时版本来编译扩展。这里要注意的事情是:
FILE*
指针如果所有这些都是孤立的,那么您将在内存中得到两个C运行时,并且它们将不会尝试进行交互。
现在,如果由于某些原因无法执行此操作,则可以尝试使用更高版本的工具集来编译扩展。最简单的方法是:
setup.py
构建)set DISTUTILS_USE_SDK=1
(这将绕过MSVC检测)set MSSdk=1
(也需要绕过旧版Python 2的检测)python setup.py bdist_wheel
(您可能需要先将wheel
安装到Python中)现在,您可以按常规方式获取转轮文件并进行安装,也许是通过提取/复制文件或将完整文件名传递到pip
。
通常,很可能仅建立扩展就不会成功。在这种情况下,您必须修改源代码才能正常工作-在VC 9.0和VC 12.0之间的三个MSVC版本中,很多名称已被弃用和删除,因此您不会看到其中的任何弃用警告。
如果库开发人员已经使他们的库可以使用Python 3,则许多修补程序应该存在,但可能无法检测到(因为Python 3使用了不需要修补程序的VC 10.0或VC 14。 x,可能会检测为_MSC_VER >= 1900
,而不会检测到VC 12.0)。如果您提供所做的任何修补以帮助下一个人,他们将不胜感激,但是许多库开发人员现在都放弃了对3.5之前的Python版本的支持,因此他们可能不希望维护旧版支持。