python编译器用python编写,使独立的可执行文件制作

2021-06-17 18:31:13

本文档是推荐的首次阅读,如果您感兴趣的Nuitka,了解其用例,请检查您可以期待,许可,要求,学分等。

Nuitka是Python编译器。它是用Python写的。它是Python解释器的替换或扩展,并编译CPython 2.6,2.7,3.3,3.4,3.5,3.3,3.8,3.9,3.8,3.9的每个构造时,当本身运行该Python版本时。

Nuitka将Python模块转换为C级程序,该程序将在诸如CPython中以诸如CPython执行的Libpython和静态C文件。

所有优化都旨在避免开销,其中'不必要的.NONE旨在消除兼容性,尽管偶尔改进了略微改进,但不是每个标准Python量量的错误,例如,其中给出了更完整的错误消息,但是甚至有自愿兼容模式才能禁用。

至少版本为5.1的GCC编译器,或至少版本4.4的G ++编译器作为替代方案。

Windows上的MingW64 C11编译器必须基于GCC 8或高。如果未找到,它将自动下载,这是安装它的推荐方式。

Visual Studio 2019或更高版本在Windows [2],旧版本WORNWORK,但仅支持商业用户。配置为使用前英语语言包进行最佳效果(Nuitka过滤器远离烧烤输出,但仅适用于该语言)。

在Windows上,可以使用Visual Studio Installer的IfProved Windows上的Clang-Cl编译器。 对于Python 3.3 / 3.4,只有那些,我们需要其他Python版本作为编译时间依赖性。 Nuitka本身与所有列出的版本完全兼容,并在内部使用的工具上施用。 对于这些版本,您还需要一个Python2或Python 3.5或较高的安装,但仅在编译时间期间。 这是必要的冒劣(由C编辑编排),哪个不支持与Nuitka相同的Python版本。 此外,在Windows上,不能使用Python2,因为CLCache不适用于它,有一个要安装的Python 3.5或高位。 Nuitka找到了这些所需的Python版本(在Windows vieregistry上),您应该注意它,只要它们被装载即可。 创建的二进制文件可以独立于typthon安装,withstandalone和--onefileOptions进行可执行。

创建的二进制文件在Windows上有一个.exe后缀。在其他图案上,它们没有独立模式的后缀,或者.binsuffix,您可以自由删除或更改,或使用-o选项指定。

添加加速模式的后缀只是为了确保理想的脚本名称和二进制名称不会碰撞,Sowe可以在不破坏原始源文件的情况下安全地进行覆盖。

您需要标准的Python实现,调用" cpython",toexecute nuitka,因为它与它的实施密切相关。

在Windows上,对于Python未安装系统范围和AccelerationMode,您需要将Pythonxx.dll复制到它,Nuitka自动确实。

众所周知,Windows App Store Python绝对不做,它' s检查。在麦斯科斯州和#34; Pyenv"可能不起作用。

其他人也可以工作。该便携性预计将是繁多的,但是冒险使用可能必须适应。确保Tomatch Windows Python和C编译器架构,否则您将无用的错误消息。

其他架构预计还将在框中工作,Asnuitka通常不使用任何硬件细节。这些只是测试的人并且已知是好的。欢迎反馈。通常,Debian支持的架构也可以被认为是好的。

对该C11的支持是具有GCC 5.x或更高版本或更高的或任何铿cl频率的A.

MSVC编译器并未执行。但作为一个解决方法,随着C ++ 03Language标准与C11非常重叠,然后使用C编译器太旧了。 Nuitka过去需要过去的C ++ Compilerin,但它改变了。

建议使用最新版本但不需要。另一方面,除了Pre-Windows 10支持外,无需需要,它们可能会为您工作,但只能为这些配置的支持仅适用于商业用户。

推荐的Nuitka的方式是< the_right_python> -Mnuitka绝对确定哪个Python翻译你是非常的,所以更容易与Nuitka有什么相匹配的。

执行nuitka裸露的下一个最佳方式是从源代码或存档,没有环境变量变化,大多数是不可能的,你不必在所有fornuitka上弄乱pythonpath。您只需执行Nuitka和Nuitka运行scriptsdirectly,而不会对环境进行任何更改。您可能希望为您的方便添加BIN目录,但步骤可选。

此外,如果要在该库中执行正确的解释器,请务必执行< the_right_python>宾/ nuitka,是好的。

如果您遇到了一个SyntaxError,那么绝对最肯定的是挑选错误的翻译,为您的程序编译。

nuitka-run命令与nuitka相同,但具有变化的默认值。它试图编译并直接执行Pythonscript:

此选项不同的是--Run,并将ArgumentsAfter传递给创建的二进制文件的第一个非选项,因此它与普通的Python都有奇怪。

对于大多数系统,Nuitka的下载页面将有包。但是,如上所述,您可以从源代码中安装它,还可以通过普通pythonsetup.py安装例程安装它的任何其他Python程序。

Nuitka在Apache许可证版本2.0版下获得许可;除非遵守许可,您可能会通知它。

除非适用法律要求或商品定,否则在许可证下软件分布在AN&#34上;如"基础,没有任何形式的保证或条件,无论是表达还是暗示。在许可证下,将特定语言的许可证进行许可。

如果您没有安装任何内容,这是基本步骤,当然如果您留下了零件,只是跳过它。

选择Windows X86-64基于Web的安装程序之一(64位Pitython,推荐)或X86可执行文件(32位Python)安装程序。

像你一样做。运行Nuitka在代码上运行不正确的不正确,更容易调试。

这将提示您下载C缓存工具(加快生成的C代码的汇编)和基于Mingw64的C代表。对那些人说“是”。

如果您希望从C编译添加--Show-scons完全输出,但如果您有错误,那应该只有很有用。

要分发,构建 - andstandalone选项,它不会输出单个可执行文件,而是一个整个文件夹。将生成的hello.dist文件夹复制到另一台计算机并运行它。

您也可能尝试创建一个文件的 - 只要独立的独立就是在转向它之前,因为它只使调试更加困难,例如,这是唯一的独立就是工作。在丢失数据文件的情况下。

如果您想递归地编译整个程序,而且不仅是主要程序的文件,请这样做:

粒度粗糙的控制比偏移更多的粒化。考虑nuitka - help的输出。包括较少模块的编译,而是使用对iTwill的普通Python使得速度更快。

如果您有一个具有动态加载文件的源目录,则i.e.E.ONE无法在正常导入语句之后进行调用,PythonPath(这将是推荐的方式),Compoway要求给定目录也应包含在“可执行的中:

如果你不做任何动态导入,只需在编译时间设置你的PythonPath就是你应该做的。

使用 - 仅当您制作__import __()呼叫Nuitka无法预测时,才使用 - Include-Plugin-Directory,因为它们是取决于CommandLine参数。 Nuitka也警告了这些,并指向了选择。

如果您希望能够将其复制到另一台计算机,请使用 - 和复制创建的程序.DIST目录并提交内部的Program.exe(Windows)或程序(ThicePlataTForms)。

如果要编译单个扩展模块,那么您必须做的就是这样:

它'留下了读者的锻炼,找出会发生什么,如果存在。

选项 - 偏移 - 导入和其他变体也运行,但随着导入的某些_Module名称后,包含的模块将只会进入。

生成的扩展模块只能加载到相同版本的CPython中,并不包括其他扩展模块。

如果您需要编译一个整个包并嵌入所有模块,那么ISALSO可行,请使用这样的Nuitka:

需要提供在包目录中的递归,否则,包是空的。尚未嵌入insidethe包的数据文件尚未嵌入。

对于分发到其他系统,存在独立的模式,它使您可以指定的文件夹进行标准。

此模式下默认遵循所有导入。您可以通过具体说--nofollow-import-to来选择性地排除,但是当在ProgramRuntime尝试导入时,将提出一个导轨交耳。

有关要包含的数据文件,请使用选项 - include-data-file =<源> =< target>源是文件系统路径的位置,但必须指定目标相对。对于独立的YouCan也可以手动复制它们,但这可以做额外的检查,而丧坏的模式,没有手动复制。

要在目录中复制某些或全部文件,请使用选项 - include-data-file = / etc / *。txt = etc /您可以在其中指定文件的shellpatterns,以及将它们放在哪里的shellpatterns,指示尾随斜线。

要使用所有文件复制整个文件夹,可以使用 - include-data-dir = / path / path / to / images =映像将复制所有文件的潜在子目录结构。你不能在这里过滤,即。如果您只想要部分副本,请事先删除文件。

对于包数据,有一种更好的方法,使用 - 程序包数据,该数据检测包自动化的数据文件并复制它们。它甚至接受shellstyle中的模式。

使用数据文件,您很大程度上是您自己的。 Nuitka通过流行的包裹追踪onesthat,但它可能是不完整的。如果你遇到这些内容,请举行。

这将创建一个二进制文件,在Linux上甚至不会脱挂,而是将其内容循环返回为文件系统和eSethat。

在Windows上,有两种模式,将其复制到Company指定的AppDataOf,也将其用作缓存,以及在临时目录中执行的。你需要这样做这个。

有更多的Windows特定选项,例如,与图标,Butalso更多版本信息,请考虑-help输出为此。

同样,在Windows中,对于临时文件目录,默认情况下,使用UserOne,但是,这可以通过路径规范给定in-windows-onefile-tempdir-spec =%temp%\\ onefile_%pid%_%time%哪个默认值并断言临时目录创建无法提供。

您有责任使路径提供唯一的路径,onWindows将被锁定运行程序,而在使用固定文件名称的同时可以在这种情况下导致锁定问题,程序重新启动程序。

通常,您需要使用%时间或至少%PID%来使ABATH唯一,这主要用于使用案例,其中e.g.您希望驻留在您选择或遵循您的命名的地方。

如果您的脚本修改sys.path以例如ISERT IDIVERIES与IT相关的代码,Nuitka目前无法获得。但是,如果将PythonPath设置为结果值,则可以编译它。

如果您的程序无法提交数据,则可能导致各种不同的不同行为,例如,包可能抱怨它不是正确的版本,因为版本文件默认为未知。缺少文件或帮助文本,可能会引起奇怪的错误。

通常,未存在的文件的错误路径甚至是错误的,并显示了未绑定的本地变量等编程错误。请注意这些例外,牢记这可能是这样。如果您编程没有独立的工作,则可能是数据文件是原因的。

这些需要特殊的处理能够在其他系统上运行。手动复制它们是不够的,并将给出奇怪的错误.Sometimes inder版本的软件包,尤其是numpy可以不受支持。 Inthis案例您必须提出一个问题,并使用较旧的案例。

一些包装是单一的进口,但到Nuitka意味着不仅仅是athousand包(字面上)。 PANDAS的主要示例,这确实想要插入和使用您的Canimagine的一切。用于语法的多个框架,突出显示蜜模易可弥补的时间。

Nuitka必须学习有效的缓存来处理这一点。现在,您将必须处理巨大的编译时代。

目前,应该应用战斗依赖CREAP中的主要武器,即可以使用的反膨胀插件,它提供有趣的能力,可以使用并阻止不需要的导入,在其发生的位置给出错误。用它来与此--enable-plugin =反膨胀 - 诺斯clude-pytest-mode = nofollow --noinclude-setuptools-mode = nofollow和检查其帮助输出。它可以采取您选择的每个模块,例如。迫使使用PyQT5被认为卸载了StandaloneMode。

Sys.argv [0]和__File__的Intefile Module的___File__之间存在差异,这是由使用自举到Olimantical的引起的。第一个将是原始可执行路径,其中第二个将是临时或永久路径thebootstrap可执行的解压缩。数据文件将位于稍后的位置,您的原始环境文件将在前部分配中。

给定2个文件,您希望在您的可执行文件附近的文件,以及您希望在onefile二进制内部的内部,如此访问它们。

#这将在Onefile.exe打开附近找到一个文件(操作系统。路径。加入(操作系统。路径。姓氏(sys。argv [0]),"用户提供的-file.txt"))#这将在OneFile.exe打开中找到一个文件(操作系统。路径。加入(操作系统。Dirname(__file__),"用户提供的-file.txt"))

有关调试目的,请删除 - 禁用 - 控制台或使用“浏览器 - 强制-STDOUT-SPEC和--WINDOWS-FORCE-STDERR-SPEN,其中包含用于上面的--Windows-OneFile-Tempdir-Spec的路径。

#编译模式,支持操作系统。 #nuitka-project-if:{os}在(" windows" linux&#34 ;," darwin&#34 ;," freebsd"):# Nuitka-Project: - onefile#nuitka-project - if:{os}不在(" windows"" linux&#34 ;," darwin&#34 ;,&#34 ; FreeBSD"):#nuitka-project: - andstandalone #pyside2插件封面qt-plugins#nuitka-project:--enable-plugin = pyside2#nuitka-project:--include-qt-plugins =明智, QML.

评论必须是行的开始,并且要使用缩进,并将条件块倒置,就像在Python中一样。目前存在比上面展示的使用者的其他关键字。

将像-O或-S -SS的事物传递给Python,在您的编译程序中,有一个命令行选项名称--python-flag = iniuperka模拟这些选项。

使用相同的输入文件调用时C编译器将需要长时间和大量的CPU来编译一遍又一遍。确保使用GCC时安装和配置CCCORE(即使在Windows上)。 ITWILL使重复的编译更快,即使事情尚未完美,即对程序的更改可能会导致许多C文件嘟嘟,需要新的编译而不是使用缓存的结果。

在Windows上,使用GCC Nuitka支持使用CCACHE.EXE,它不会从官方来源下载并自动下载。这是建议在Windows上使用它的方式,因为其他版本可以是e.g.hang。

Nuitka如果在系统路径中发现的,并且还可以通过将Nuitka_ccache_binary设置为二进制的完整路径,而且可以提供'它。

对于MSVC编译器和ClangCl设置,使用CLCache isAutom自动并包含在Nuitka中。

所有类型,下载,cachedcompilation结果的缓存结果存储在由appdirs包确定的平台依赖性指南中完成。但是,您可以使用设置环境变量nuitka_cache_dirto一个基本目录来Canoverride。这适用于家庭未持续的环境,但其他路径是。

避免运行Nuitka二进制文件,做Python -M Nuitka WillMake 100%确定您正在使用您认为的内容。使用workpython将使您为已安装模块提供良好代码或importError的SyntaxError。那是在发生的情况下,当您在Python3代码上使用Python2进行runnuitka,反之亦然。通过显式连接相同的Python解释器二进制文件,您可以避免不起作用。

具有64位Pythonoved的Pystone.exe最快的二进制文件。MingW64,大约20%BettersCore的速度明显更快。所以建议使用MSVC。使用Clang-Cl.exe的Clang7比MSVC更快,但仍然显着慢于MINGW64,并且可以使用它更难,因此不建议使用。

关于PiLstone的Linux.bin由Clang6富斯比GCC-6.3产生的二进制文件,但不是明显的边距。由于GCC ISMORE往往已安装,因此建议使用它。

使用python dll,如标准cpython确实可以导致意外的光线,例如,在与Unicode字符串合作的未划分的代码中。这是因为调用DLL而不是驻留在DLL原因中,这甚至会发生在DLL上,它自身慢,而不是一个二进制中包含的Python。

因此,如果是可行的,瞄准静态链接,目前仅为非窗口上的Anaconda Python。

使用外部依赖步行者制作Windows CommitionalLvenves的独立可执行文件的过程,以便将所需的程序与编译的可执行文件一起复制到分发文件。

有很多方法可以找到一些东西缺失。请勿将事物复制到文件夹中,ESP。不是DLL,就像那样。相反,制作错误报告以通过Nuitkaproperly处理这些处理。

在Windows中,Windows Defender工具和Windows索引Serviceboth扫描新创建的二进制文件,而Nuitka则希望与之工作,例如,添加更多资源,然后阻止操作随机键保持锁定。请务必从这些服务中排除您的编译阶段。

无论是使用MinGW或MSVC编译,独立程序haveexternal依赖于Visual C运行时库。 Nuitka尝试通过从系统复制它们的依赖的DLL来划伤这些依赖的DLL。

从Microsoft Windows 10开始,Microsoft Ships Ucrt.dll(通用C运行时库)将调用API-MS-CRT - *。DLL。

使用早期的Windows平台(和Wine / ReactOS),您应该在执行NuitkAstandalone编译程序之前考虑Visual C运行时库。

从Nuitkacompiled DIST文件夹* .dll文件 - 一旦相应的运行时库在targetsystem安装,你可以删除所有API-MS-CRT。

它不'不像其他工具t将sys.frozen。对于Nuitka,我们还有模块属性__compiled__测试是否是特定的模块已播放。

请记住,此项目尚未完成。虽然CPython Testsuite在完美附近工作,但仍然存在

......