我今天开始扩展这个答案以提供示例代码。在这样做的过程中,我无意中发现了他的PyOxidizer工具的a recent blog post by Gregory Szorc,从表面上看,它做的更多的是你在操作中寻找的东西。它使用Rust将Python简化为机器代码,虽然它仍然在技术上需要运行时,但它将运行时嵌入到可执行文件中,这样就不需要捆绑文件了。如果你试试这个,我会对你的想法感兴趣的。在
由于我仍然认为我之前的答案可能有用,下面是更新:
一般回答
我不知道100%覆盖的解决方案。我认为这在很大程度上取决于你的代码、复杂性、依赖性和目标。在
你提到过尝试Cython。我觉得这比你看到的还要多。我对Cython不太熟悉,这只是我读到这个话题时会想到的一个选项。但我想您可以使用它来构建一个本地可执行文件,这取决于运行时的要求。在
您也可以自己构建一个可执行文件,方法是编写一个小的C程序来实例化一个python解释器,并从一个单独的文件或用bytestring编译的文件加载编译的python字节码。有关这方面的详细信息,请参阅Python embedding/extending documentation。在
运行时问题
将Python代码构建到本机机器可执行文件(这称为嵌入)中是很容易的,但是(在您的注释中)您仍然需要Python运行时。但这是一个复杂的问题。对于一个足够小的用例,例如简单的hello world,可以将实际依赖的元素绑定到代码中。(例如,静态链接到python库。)
如果您正在寻找一个任意可伸缩的解决方案,那么一个常见的解决方案——我从商业游戏到备份软件——就是捆绑一个足够的、为您的目标平台预编译的python二进制运行时,并带有一个可以预测或控制的安装前缀(即不是/