如何消除Python扩展对UCRT的依赖性

时间:2017-12-11 15:09:07

标签: python visual-studio pyinstaller nuitka

我正在使用cython生成*.c个文件,稍后将使用MS Visual Studio 2017编译为C/C++。这一切都很精彩,所有python *.lib都是动态链接的小例外。 由于我的目标是生成一个自包含的exe(大的exe大小不是问题),我想问一下是否可以静态链接所有的Python *.lib。我已经尝试指定\MT发布选项并在Debugger include上定义所有Python库。

不幸的是,我的所有努力都是徒劳的,因为动态链接的可执行文件在复制到另一台计算机时找不到python3.dll。目前我计划将整个python安装目录与可执行文件一起复制,并在编译时指定正确的包含链接。

因此,我对生成一个独立的可移植可执行文件的任何选项感兴趣。

感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:1)

xaav是正确的。

我无法评论所以相反,我会将此作为解决方案发布,希望它能引导您走上正确的道路。

Cython存在是有原因的。你得到你的python代码,添加一些更改和bam,你的代码是cythonised。

这有两个原因。要混淆代码,它可以加速代码(取决于)。

为什么不使用cython和pyinstaller?这是经过试验和测试的。 Pyinstaller甚至说它支持它。你所采取的方法可以在理论上完成,但它过于复杂,甚至不需要。

可能的担忧:

但他们不能窃取我的源代码吗?不,它已被cython化,所以是,但不容易。

我不能使用Nuitka吗?是的,如果你想让它变得越来越麻烦而且没有按预期工作。

库怎么样,它们不能在另一台PC上运行?规范文件存在是有原因的。一点人工处理,这可以工作。

我不能编译成c ++,然后单独使用它吗?看看未回答的问题的数量和无法使用它的人。此外,当pyinstaller和cython存在并执行相同的操作时,不需要它。 Cython受到广泛支持。感觉就像你在做长而艰难的事情。

但是不容易编译成c ++。没办法,pyinstaller已经完成了大部分的工作。您可能必须在此处调整spec文件,否则它是唯一的方法。请记住,它也与pyupdater集成。