Skip to main content
 首页 » 编程设计

python之Nuitka standalone 并不是真正独立的

2024年10月01日38arxive

我计划为一个项目使用 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、Dill、BS4(还有json、base64、os 和 sys)

请您参考如下方法:

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

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