Nuitka on Windows

7

在Windows上使用Nuitka编译hello-world.py遇到了问题。

我正在使用的命令是:

nuitka --standalone --portable --remove-output --recurse-all --python-version=3.4 hello_world.py

错误:

WindowsError: [Error 2] The system cannot find the file specified:
File "C:\Users\win_user\Anaconda3\Lib\site-packages\nuitka\build\SingleExe.scons", line 866:
shell       = False
File "c:\Python27\lib\subprocess.py", line 709:
errread, errwrite)
File "c:\Python27\lib\subprocess.py", line 957:
startupinfo)

同样的代码在Linux上编译和运行没问题,在Windows解释器中也能正常运行。

错误信息中提到的文件确实存在。有什么建议吗?

使用Win7操作系统,Python 3.4(Anaconda x64),使用MinGW。

1个回答

10

好的,为了让所有遇到同样错误的人受益,以下是我自己问题的答案:

我未能让MinGW正常工作。最终我安装了MSVC2010。这可能更好,因为它也被推荐用于Windows上的Python 3.4(请参见:https://docs.python.org/3.4/using/windows.html#compiling-python-on-windows)。

以下是使用python 3.4、MSVC++2010和Win7 64位安装Nuitka的说明:

有关MSVC2010的其他有用说明:
1. https://wiki.qt.io/How_to_setup_MSVC2010
2. http://uk.mathworks.com/matlabcentral/answers/95039-why-does-the-sdk-7-1-installation-fail-with-an-installation-failed-message-on-my-windows-system

步骤如下:

  1. 安装 .net 4.x:
    运行dotNetFx40_Full_setup.exe (从http://www.microsoft.com/en-gb/download/confirmation.aspx?id=17851下载)

  2. 安装 Visual C++ 2010 Express:
    运行vc_web.exe (从http://microsoft-visual-cpp-express.soft32.com/download/file/id/795918/?no_download_manager=true下载)

  3. 卸载任何新版本或等于10.0.30319的Visual C++ 2010运行时/可分发组件。(在我的情况下,这个设置是在一个干净的Windows安装中完成的,因此没有需要移除的内容)

  4. 安装Windows SDK 7.1: (选择所有安装选项)
    运行winsdk_web.exe (来自https://www.microsoft.com/en-us/download/details.aspx?id=8279)

  5. 安装VS 2010 SP1:
    运行 VS10sp1-KB983509.exe (来自http://www.microsoft.com/en-au/download/details.aspx?id=23691)

  6. 安装MSVC 2010 SP1编译器更新:
    运行VC-Compiler-KB2519277.exe (来自http://www.microsoft.com/en-au/download/details.aspx?id=4422)

C编译器现已安装。

  1. 测试64位机器时,我发现缺少一个文件,必须手动创建。 (请参阅此处:http://www.w7forums.com/threads/vcvarsall-bat-no-64bit-support-vcvars64-bat-missing.6606/)
    要修复,请创建一个名为C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\bin\amd64\vcvars64.bat的文件 在文件中输入文本CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64

  2. 设置环境:
    运行命令 "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall" amd64
    执行上述命令后,控制台文本应变为黄色。
    (此处提供其他选项,请参见:https://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx

  3. 编译测试程序:(在cmd文本仍然为黄色时执行此操作)
    cl hello.c
    (假设您的测试程序名为hello.c

  4. 运行测试程序:
    hello.exe

C 编译器现已经过测试。

  1. 安装 python 2.7:(即使 python 代码是 3.x 版本,Nuitka 也需要这个版本)
    运行 python-2.7.6.amd64.msi(来自https://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi

  2. 安装 python 3.4:(Anaconda 堆栈似乎是在 Windows 上获取此版本的最可靠方式)
    运行 Anaconda3-2.3.0-Windows-x86_64.exe(来自https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.3.0-Windows-x86_64.exe

  • 安装Nuitka: (新版本不断更新,建议参考http://nuitka.net/pages/download.html)
    运行Nuitka-5.1.143.win-amd64.py34.msi (来自http://nuitka.net/releases/Nuitka-5.1.143.win-amd64.py34.msi)

  • 所有安装完成!

    1. 测试Nuitka: (假设您的测试程序是 hello.py)
      "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall" amd64
      nuitka --standalone --portable hello.py
      cd hello.dist
      hello.exe

    第一次使用 nuitka 时,它给出了以下提示:"Nuitka将使用Dependency Walker (http://dependencywalker.com) 工具分析Python扩展模块的依赖项。是否下载并将其放置在APPDATA中(无需安装程序,可以缓存,只问一次)。继续并下载? [是]/否"。我选择了是,然后hello world程序就能正常工作了。

    Hello world程序在这个过程中工作了,但是一些更复杂程序中的导入会引起警告。如果我能解决这个问题,我会编辑我的回答。如果无法解决,我将提出另一个问题。


    2
    注意:以上方法对于简单的程序似乎可以正常工作,但并未进行全面测试。另外需要严格说明的是,Nuitka要求使用VS 2015,但似乎与上述的2010 express版本兼容良好。 - Ron
    我没有那么幸运,似乎一些下载链接已经失效或者不能访问。如果有一个预装了Nuitka的VM(适用于Windows系统),那就太棒了——我已经浪费了足够多的时间来让它正常运行了。 - Doug E Fresh
    现在,Nuitka需要使用Visual Studio / Build Tools 2019。 - Winand

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接