Nuitka 独立版并不是真正的独立版

问题描述 投票:0回答:3

我计划在项目中使用 Python (3.6) 脚本,尽管最终用户的系统上可能没有 Python。为了解决这个问题并使一切尽可能顺利,我尝试使用 Nuitka 编译我的 Python 脚本并使其独立。

为了做到这一点,我只是跑了

nuitka --standalone --recurse-all myscript.py

执行此操作需要一定的时间,但最终会生成一个带有

myscript.exe
的文件夹,我可以像运行脚本一样运行该文件夹。

但是,一旦我尝试在另一台计算机上运行它,无论它是否安装了Python,我都会抛出错误:

Traceback (most recent call last):
  File "D:\Users\thoma\Desktop\recuperation.dist\recuperation.py", line 6, in <module>
  File "D:\Users\thoma\Desktop\recuperation.dist\requests\__init__.py", line 43, in requests
  File "D:\Users\thoma\Desktop\recuperation.dist\urllib3\__init__.py", line 8, in urllib3
  File "D:\Users\thoma\Desktop\recuperation.dist\urllib3\connectionpool.py", line 7, in connectionpool
  File "C:\Users\Thomas\AppData\Local\Programs\Python\Python36\lib\socket.py", line 49, in <module>
ModuleNotFoundError: No module named '_socket'

另外,我一开始也很难让它工作,因为它缺少

cacert.pem
,但我通过复制我发现
certifi
附带的
requests
文件夹解决了这个问题。不知道有没有关系。

我的脚本使用

Requests
Dill
BS4
(以及
json
base64
os
sys

python nuitka
3个回答
3
投票

--standalone
选项(尚)不会生成单个文件二进制文件。为了在另一台机器上运行
myscript.exe
,您必须提供在 nuitka 输出目录中找到的所有文件。

幸运的是,正在进行的工作允许编译为单个文件二进制文件:https://github.com/Nuitka/Nuitka/issues/230


0
投票

自 Python 3.3 起

__init__.py
Python 模块中不再需要文件。 Nuitka 有时会根据这些文件的存在而忽略构建中的模块。如果它们不存在,解决方法是手动添加它们。


0
投票

我不知道当您发布问题或得到答案时哪些可用或不可用,但现在您可以添加选项

--onefile
来强制 Nuitka 生成单个二进制文件。

命令示例:

nuitka --onefile --standalone main.py

© www.soinside.com 2019 - 2024. All rights reserved.