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, osand sys

4

2 回答 2

2

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

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

于 2019-05-31T18:31:38.143 回答
0

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

于 2018-08-09T08:16:40.457 回答