Nuitka standalone并不是独立的

时间:2017-09-09 09:53:57

标签: python nuitka

我打算为项目使用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。不知道是否相关。

我的脚本正在使用RequestsDillBS4(以及jsonbase64ossys

2 个答案:

答案 0 :(得分:0)

因为Python模块中不需要Python 3.3 __init__.py文件。 Nuitka有时会基于这些文件的存在而忽略构建中的模块。一种解决方法是手动添加不存在的

答案 1 :(得分:0)

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

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