我正在为我的项目使用 nuitka。它有一些 3rd 方模块作为依赖项,我使用的是 virtualenv。
如何在 virtualenv 中使用 nuitka?
谁能说出如何检测代码是否在Nuitka创建的exe或正常的python解释器中运行?
我认为我理想上希望一个“ is_nuitka ”标志在编译时设置为True,并且在不编译时根本不存在。
然后可以使用如下代码:
if '__is_nuitka__' in locals() or '__is_nuitka__' in globals():
print('debug info: running in nuitka mode')
Run Code Online (Sandbox Code Playgroud)
有什么建议么?有这样的东西吗?还有其他方法吗?
我正在尝试使用Nuitka构建一个可执行文件,用于以下简单代码:
from numpy import abs
var = raw_input("Please enter something: ")
print "you entered", var
print abs(-43.2)
var2 = raw_input("Secundo: ")
print var2
Run Code Online (Sandbox Code Playgroud)
我编译的Nuitka代码是:
nuitka --standalone --show-scons FILENAME
Run Code Online (Sandbox Code Playgroud)
这显然是我的问题的简化.我尝试编译没有numpy并且不使用"abs",并且exectuable执行完美.但是,当我使用numpy代码编译时,我尝试执行生成的.exe,我收到以下错误:
Traceback (most recent call last): File "...\__init__.dist\__init__.py", line 1, in <module>
File "...\__init__.dist\numpy\__init__.py", line 142, in numpy
File "...\__init__.dist\numpy\add_newdocs.py", line 13, in add_newdocs
File "...\__init__.dist\numpy\lib\__init__.py", line 8, in lib
File "...\__init__.dist\numpy\lib\type_check.py", line 11, in type_check
File "...\__init__.dist\numpy\core\__init__.py", line 14, in core
ImportError: LoadLibraryEx '...\__init__.dist\numpy\core\multiarray.pyd' failed
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.7.8 64bit,Numpy 1.11.3 64bit,Nuitka 0.5.24.4 …
如标题所述,我可以使用nuitka创建单个文件可执行文件吗?我尝试--portable和--standalone选择,但它们似乎不起作用。谁能解释一下这个--recurse-all选项吗?如果您还有其他建议,请告诉我。我不想使用pyinstaller,因为它启动我的应用程序太慢。感谢您的任何回复。
第一次在 macOS (10.14) 上尝试 Nuitka。
我做了python3 -m nuitka --standalone hello.py(也试过--clang)
结果是一个奇怪的hello.dist文件夹——它甚至没有在 Finder 中显示为文件夹——它包含一堆.so文件,Python以及我的可执行文件hello.
我以为它会创建一个.app捆绑包?还有一步吗?
(我也试过https://sveinbjorn.org/platypus但这并不能真正编译 python。)
我开发了一个 PyQT5 应用程序,它也使用 Numpy、Pandas 和 Plotly。为了将其打包,我决定使用 Nuitka,但是由于该产品面向不熟悉 Python 的最终用户,我想确保解释器与应用程序一起打包为单个二进制文件(类似于 PyInstaller) 。
我正在运行以下命令,但是遇到了错误,我正在努力找出如何修复:
$ python -m nuitka --standalone --show-progress --recurse-all --plugin-enable=numpy main.py
Run Code Online (Sandbox Code Playgroud)
我正在使用 PyCharm,所有库都位于项目目录的虚拟环境中。我使用的Python版本是3.9。
在 Windows 中生成了可执行二进制文件,但是在运行时我收到以下错误消息:
C:\Users\user\PycharmProjects\PlotlyExample\main.dist>main
Traceback (most recent call last):
File "C:\Users\user\PYCHAR~1\PLOTLY~1\MAIN~1.DIS\numpy\core\__init__.py", line 22, in <module numpy.core>
File "C:\Users\user\PYCHAR~1\PLOTLY~1\MAIN~1.DIS\numpy\core\multiarray.py", line 12, in <module numpy.core.multiarray>
File "C:\Users\user\PYCHAR~1\PLOTLY~1\MAIN~1.DIS\numpy\core\overrides.py", line 7, in <module numpy.core.overrides>
ImportError: LoadLibraryExW 'C:\Users\user\PYCHAR~1\PLOTLY~1\MAIN~1.DIS\numpy\core\_multiarray_umath.pyd' failed: The specified module could not be found.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\user\PYCHAR~1\PLOTLY~1\MAIN~1.DIS\main.py", …Run Code Online (Sandbox Code Playgroud) 我有一个大型 Python 项目,其中包含多个脚本并导入一些重型库(例如 PyTorch)。
我需要使用这个项目作为 .NET 中最终解决方案的一部分。
此外,它应该是独立的和可分发的,因为在客户端设置Python环境不是一种选择。
最好的方法是能够制作DLL或静态库,但任何替代方法(例如可执行文件)都可以。
PyInstaller,Nuitka。
在这两种情况下,我都遇到了一个或多个软件包的一些死胡同问题。例如 Nuitka 使用 PyTorch 失败
最终解决方案的原型依赖于正在运行的 Python 和 .NET 程序之间的 RPC 通信。
但分发和源代码保护是该架构无法解决的问题。
更新: 目标平台是Windows
在过去的几天里,我一直在玩Nuitka,这是一个将Python编译成可执行C/C++程序的工具.
我没有发现Nuitka的任何速度优势(与PyPy相比).那么Nuitka是什么意思?我错过了什么吗?
我正在Ubuntu 14.04上试验Nuitka并尝试创建并运行可执行文件.我有一个hello.py包含内容的文件
print("Hello please")
Run Code Online (Sandbox Code Playgroud)
我转而hello.exe使用该命令nuitka hello.py.但是,当我尝试使用Wine 1.7运行它时,我得到以下错误:
$ wine hello.exe
wine: Bad EXE format for Z:\home\crclayton\hello.exe.
Run Code Online (Sandbox Code Playgroud)
我认为这是Nuitka的问题,而不是Wine,因为我可以使用Wine来运行我在C#中创建的helloworld.exe.有谁知道如何修理它?
编辑:
我在Ubuntu上没有运气,所以我测试了我的Windows 7分区上的hello.exe(Ubuntu和Windows都是64位),我收到以下错误:
此文件的版本与您正在运行的Windows版本不兼容.检查计算机的系统信息,以查看是否需要该程序的x86(32位)或x64(64位)版本,然后与软件发行商联系.
问题是Nuitka正在创建一个32位的exe并且我试图在64位操作系统上运行它吗?如果是这样,任何人都知道如何解决它?
我是编码的新手,我需要将我的py文件转换为exe.我试过py2exe,它不适用于python 3.5.然后我尝试了pyinstaller它工作,但当我将PyQt5添加到程序时,pyinstaller也失败了.我尝试了nuitka,它构建了exe,但是当我点击exe文件时,它会显示一个控制台几秒钟并关闭.我需要一个在激活后显示gui的exe.以下是我在程序中使用的模块:
import P4
import time
from datetime import datetime,date
import traceback
import os
import sys
import threading
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QCoreApplication, QTimer
Run Code Online (Sandbox Code Playgroud)
我从nuitka exe文件得到的错误:

我从pyinstaller exe文件获得错误:

Dll是pyinstaller需要的: dll
Nuitka 擅长将 Python 编译为可执行的二进制文件。\n但是编译后的二进制文件会从原始绝对路径中找到其他资源文件。\n因此,要移动到另一台计算机,需要制作目录树原始目录树相同。
\n\n例如,如果我编译一个这样的项目:
\n\n/home/me/myproj/\n\xe2\x95\xa0\xe2\x95\x90 myprog.py\n\xe2\x95\x9a\xe2\x95\x90 resource\n \xe2\x95\x9a\xe2\x95\x90 foo.data\nRun Code Online (Sandbox Code Playgroud)\n\n我应该将生成的二进制文件和资源放到另一台计算机的同一位置。\n如何解决此问题?
\n\n我更简单的尖峰是:
\n\n# /home/me/myproj/spike.py\nimport os\nprint(os.path.dirname(__file__))\nRun Code Online (Sandbox Code Playgroud)\n\n编译后,移动到任何其他位置,我总是得到以下结果/home/me/myproj.
我需要一个结果,就像/another/path我将编译myproj.bin到/another/path.
nuitka ×11
python ×8
compilation ×2
numpy ×2
pyinstaller ×2
python-3.x ×2
windows ×2
dll ×1
executable ×1
mingw-w64 ×1
py2exe ×1
pypy ×1
pyqt5 ×1
ubuntu ×1
wine ×1