问题标签 [nuitka]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何使用 Nuitka 从 Python 获取已编译二进制文件的当前路径?
Nuitka 擅长将 Python 编译为可执行的二进制文件。但是编译后的二进制文件会从原始绝对路径中找到其他资源文件。因此,要移动到另一台计算机,需要使目录树与原始目录树相同。
例如,如果我编译这样的项目:
我应该将生成的二进制文件和资源放到另一台计算机的同一位置。如何解决这个问题呢?
我更简单的尖峰是:
在编译它之后,移动到任何其他位置,我总是得到/home/me/myproj
.
我需要一个结果,比如/another/path
我将编译myproj.bin
到/another/path
.
python - Nuitka 编译的 Web 应用程序在退出时引发错误
我正在开发一个实时 3d Web 应用程序项目。它建立在 Bottle 和 Gevent 之上(使用 bottle-websocket 插件)。
使用 Nuitka 编译后,我们的开发服务器工作正常,除了一个:在 Ctrl+C 退出时引发错误。错误输出如下所示
为什么会这样?
python - Heroku 上的二进制 Python 模块导入错误:ImportError: /app/mylib.so: undefined symbol: _PyGC_generation0
我做了什么
- 编译
mylib.py
->mylib.so
使用 Python 3.6 + Nuitka 0.6.5 - 添加
mylib.so
到 Heroku 应用并部署到 Heroku - 我的应用程序没有在 Heroku 服务器上运行
- 所以我进入 Heroku bash 并尝试
mylib
手动导入
错误
问题
- 为什么我会收到此错误?
- 如果 Heroku 不能用于 Nuitka 编译的二进制文件,是否有任何替代的免费服务?
python - 执行使用 nuitka 创建的独立 exe 时出现导入错误
我正在尝试使用 nuitka 从 python 代码创建一个独立的 exe。它是一个相当大的程序,包含多个库,例如 PyQt5。
我使用以下方法创建了 exe:python -m nuitka --standalone --follow-imports --enable-plugin=qt-plugins --enable-plugin=numpy --python-flag=no_site --mingw64 rs_main.py
我也尝试过不使用--mingw64
and--python-flag=no_site
标志,但是当我尝试执行生成的 exe 时,它们都会给我同样的错误:
ImportError: LoadLibraryEx 'D:\... ...\rs_main.dist\PyQt5\QtWidgets.pyd' failed: The specified procedure could not be found.
我检查了,该文件确实存在于正确的位置。
编译本身给了我一些警告,但没有错误。
在线我在这里发现了我的问题:https ://github.com/Nuitka/Nuitka/issues/73但老实说我并不完全理解他们的解决方案之旅,我认为我认为应该在我的版本中解决它nuitka 是 0.6.6。最重要的是,我在 Windows 10 机器上运行 python 3.7.3。
希望有人可以在引用的链接中向我解释解决方案或提供他们自己的解决方案。提前致谢。
python-3.x - PyInstaller 和 Nuitka 生成非常大的文件。如何减小尺寸?
我在 Windows 上使用 Python 3.6 的 Anaconda 发行版,我希望将一个简单的 Python 脚本转换为一个独立的可执行文件。问题是生成的文件非常大(~900mb),而只使用了几个外部库。
更具体地说,我使用 PyQt5 和 pyqtgraph 以及一些集成的 python 库,例如 sys、time、os 和 math。到目前为止,我已经使用了 PyInstaller 和 Nuitka,但我似乎无法大幅减小可执行文件的大小。
我注意到存在一些占用大约 600mb 空间的 mkl 文件。删除这些文件后,我仍然能够运行我的程序,看起来很顺利。我还注意到有两个名为 libopenblas 的文件,它们似乎对程序的运行至关重要,总共有 100mb。
我已经研究过这个问题,我在 Stackoverflow 和其他网站上发现了类似的问题。人们声称他们能够使用 PyInstaller 生成小于 40mb 的 exe 文件。据说,为了实现这种尺寸减小,应该排除所有杂乱的库。但是,我不明白什么是“混乱”。例如,我尝试排除 numpy 并且程序没有运行,尽管事实上我没有在我的程序中直接使用它。显然,正在使用的库有一些依赖项,没有这些依赖项程序就无法运行。
最后,我找到了这个论坛,建议使用虚拟环境而不是 Anaconda。我尝试使用 venv 设置它,但我无法实现它,因为我的 Anaconda 安装会干扰它并且不允许我重新安装所有必要的库。
无论我做什么,我最终都会得到至少 200mb 的数据。如何获得大小小于 40mb 的功能可执行文件?如果像这样的简单程序产生如此大的文件,想象一下如果我决定集成其他库(如 tensorflow 或 scipy)最终会得到什么。这不是一个可行的解决方案,到目前为止我还没有找到解决它的方法。非常感谢任何帮助。
编辑:我尝试从其官方网站安装 Python,并从 Path 中删除了 Anaconda。我最终得到了一个稍小的文件,但它没有运行。
python-3.x - Nuitka - 将 Python 转换为 C:找不到合适的 C 编译器
我在使用 Nuitka 时遇到问题;尝试将 python 转换为 c 语言,我收到以下错误;
错误,找不到合适的 C 编译器。您有以下选择:
a) 如果安装了合适的 Visual Studio 版本,则不会自动定位,除非您在“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_86”下安装 pywin32 用于 Python 安装。
b) 要让它在没有注册表的情况下找到 Visual Studio,请从“开始”菜单执行“Visual Studio 命令提示符”或“vcvarsall.bat”。这会将 Visual Studio 添加到“PATH”中。然后它将被检测到。
c) 将 MinGW64 安装到“C:\MinGW64”或“\MinGW”,然后在执行 Nuitka 之前自动检测或将其添加到 PATH。但请务必选择正确的变体(32/64 位,您的 Python 拱门是 'x86'),否则会显示神秘错误。
正常的 MinGW 将无法工作!MinGW64 并不意味着 64 位,只是更好的 Windows 兼容性。基于 Cygwin 的 gcc 将不起作用。基于 MSYS2 的 gcc 将无法工作。clang-cl 仅在 MSVC 已经工作时才能工作。
我做了以下事情;
- pip install pywin32 已经满足了(安装在站点包下)
- 从他们网站上的 win-builds 程序安装 MinGW64(尝试了 64 位和 32 位版本)
- 通过 cmd 检查版本:
i686-w64-mingw32-gcc --version
我收到以下错误;
- 通过 cmd 检查版本:
错误:
由于找不到 libiconv.dll,无法继续执行代码。重新安装程序可能会解决此问题
手动将 libiconv.dll 添加到文件位置后;我收到以下错误;
错误:
应用程序无法正确启动 (0xc000007b)。
- 我也尝试以管理员身份运行并遇到同样的问题。
我显然做得不对,谁能帮我正确安装 MinGW64 或用其他选项解决问题?
numba - Numba (AOT) vs Nuitka
Numba (AOT) 和 Nuitka 都提供将 Python 代码编译为 C 代码的功能。至少 Nuitka 生成的 C 代码绑定了 Python 标准库,因此 C 代码严重依赖 PyObjects。换句话说,如果从头开始编写,代码看起来不像人类编写的 C 代码。因此,如果您愿意,生成的机器代码会有些冗长。我不确定 Numba 的提前 (AOT) 编译是如何工作的。这就是我所知道的。我的问题:
- Numba (AOT) 是如何做到的?
- 就速度而言,它与 Nuitka 相比如何?
请注意,我不谈论 Numba 的即时 (JIT) 编译,这是 Numba 的默认编译模式。JIT 可以考虑特定的 CPU,而 AOT 不能 - 因此 JIT 在运行期间比 AOT 更快,但需要较慢的预热阶段(编译和加载)。因此,比较会有些不公平。
python - 执行C模块的二进制字符串
有人用 Nuitka 为 python 创建了一个 C 模块。(原始 Python 代码不可用,该模块已经编译 - 所以它是一个机器二进制文件。)我想在另一个工具中使用该代码,该工具仅 Python 文件除外。所以我想将 C 代码包含到 Python 中。
更具体地说:到目前为止,我有文件thatmodule.pyi
和thatmodule.so
. 我可以将它们包含在我当前的 Python 代码中,只需import thatmodule
在mymodule.py
. 现在我只想要一个 Python 文件mymodule.py
。
我目前的想法是将代码从thatmodule.pyi
开头复制mymodule.py
并转换thatmodule.so
为二进制字符串
并将这个二进制字符串放入mymodule.py
. 然后我必须从我的 python 模块中执行这个二进制字符串mymodule.py
。我怎样才能做到这一点?
python - nuitka:如何使用--include-plugin-files?
我正在尝试使用 nuitka 编译一个非常简单的 pygame 脚本。这是脚本(main.py)
首先我尝试编译它:
python3 -m nuitka --standalone main.py
导致所有这些警告(但完成):
运行生成的二进制文件时,会打开一个黑色窗口,然后崩溃:
所以我修改了 getResource 函数,它在它崩溃的地方打印出它试图加载的文件。然后我通过--include-plugin-files
命令添加了这些文件:
python3 -m nuitka --standalone main.py --include-plugin-files=/home/xxxxx/.local/lib/python3.7/site-packages/pygame/pygame_icon.bmp --include-plugin-files=/home/xxxxx/.local/lib/python3.7/site-packages/pygame/freesansbold.ttf
但是运行生成的二进制文件会产生完全相同的崩溃。
我还尝试将 OpenGL 目录添加为 plugin-dir 并使用了 numpy 插件(我不知道这里有任何 numpy 用法,但是嘿,我认为它不会受到伤害)
python3 -m nuitka --standalone main.py --include-plugin-files=/home/xxxxx/.local/lib/python3.7/site-packages/pygame/pygame_icon.bmp --include-plugin-files=/home/xxxxx/.local/lib/python3.7/site-packages/pygame/freesansbold.ttf --include-plugin-directory=/usr/lib/python3/dist-packages/OpenGL/ --enable-plugin=numpy
(现在编译大约需要 30 分钟)但生成的二进制文件仍然会产生完全相同的崩溃。有谁知道如何使这个运行?
哦,顺便说一句,我在 Ubuntu 19.10 上使用系统 python
python - 使用 Nuitka 编译任何 Python 程序后,我得到“不是有效的 win32 应用程序”错误
我正在尝试使用 Nuitka 将我的 Python 项目编译为 Windows 可执行文件 (.exe)。在编译过程中我没有收到任何错误/警告,但是当我尝试运行生成的可执行文件时,我"C:\Python34\test.exe is not a valid win32 application"
在 Windows XP 上收到错误,在 Windows 10 上也收到类似错误)。即使我编译了“Hello, World!”,问题仍然存在。程序。有趣的是,我可以在同一台 PC 上轻松地从 Visual Studio IDE 构建和运行 C++ 项目。
我使用的是 Windows XP(x32 位)、Python 3.4.0 和 Microsoft Visual C++ 2008 Professional。
我怎么解决这个问题?