【问题标题】:Nuitka standalone isn't really standaloneNuitka 独立版并不是真正的独立版
【发布时间】:2017-09-09 09:53:57
【问题描述】:

我计划在项目中使用 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,但我通过复制我发现与requests 一起出现的certifi 文件夹解决了这个问题。不知道有没有关系。

我的脚本使用RequestsDillBS4(还有jsonbase64ossys

【问题讨论】:

  • 你使用 pip 安装了_socket 吗?
  • 不,我没有。但是如果我只使用python36 script.py 运行脚本,它就可以工作
  • 我对 Nuitka 无能为力,但在使用 distutils 时,如果 setup.cfg 指定不当,可能会出现这些问题(缺少证书等“外部文件”或缺少第三方软件包)或 cx_Freeze——因此您可以查看 Nuitka 是否支持该规范以及如何对其进行编辑
  • 这意味着该库可能已安装在您的系统中,但 nuitka 找不到它。尝试使用 pip 在本地安装它,然后将其编译成可执行文件
  • @jedwards 我会调查的。

标签: python nuitka


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    从 Python 3.3 开始,Python 模块中不需要 __init__.py 文件。 Nuitka 有时可以根据这些文件的存在忽略构建中的模块。如果它们不存在,一种解决方法是手动添加它们。

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 2019-12-07
      • 1970-01-01
      • 2019-12-28
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      相关资源
      最近更新 更多