Search code examples
mingwpython-3.4windows-7-x64anacondanuitka

Nuitka on Windows


Having problems to compile hello-world.py using Nuitka on windows.

The command I am using is:

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

The error is:

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)

Same code compiles & runs fine on Linux. Same code runs fine in interpreter on windows.

The files mentioned in the error message do actually exist. Any suggestions?

Using Win7. Python 3.4 (Anaconda x64). Using MinGW.


Solution

  • OK, for the benefit of anyone who has the same error, here is the answer to my own question:

    I failed to get MinGW working. I eventually got MSVC2010 installed instead. This is maybe better since it is recommended for Python 3.4 on Windows anyway (see: https://docs.python.org/3.4/using/windows.html#compiling-python-on-windows).

    Below are instructions for installing Nuitka using python 3.4 with MSVC++2010 and Win7 64bit:

    Other helpful instructions for MSVC2010 are here:
    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

    Steps are:

    1. Install .net 4.x:
      run dotNetFx40_Full_setup.exe (from http://www.microsoft.com/en-gb/download/confirmation.aspx?id=17851)

    2. Install Visual C++ 2010 Express:
      run vc_web.exe (from http://microsoft-visual-cpp-express.soft32.com/download/file/id/795918/?no_download_manager=true)

    3. UN-install any Visual C++ 2010 runtime/redistributable newer or equal to 10.0.30319.
      (In my case I had a clean windows install for this setup so there was nothing to remove)

    4. Install Windows SDK 7.1: (select all install options)
      run winsdk_web.exe (from https://www.microsoft.com/en-us/download/details.aspx?id=8279)

    5. Install VS 2010 SP1:
      run VS10sp1-KB983509.exe (from http://www.microsoft.com/en-au/download/details.aspx?id=23691)

    6. Install MSVC 2010 SP1 Compiler Update:
      run VC-Compiler-KB2519277.exe (from http://www.microsoft.com/en-au/download/details.aspx?id=4422)

    C compiler now installed.

    1. To test on 64 bit machines I found that there is a file missing, which has to be manually created. (See here: http://www.w7forums.com/threads/vcvarsall-bat-no-64bit-support-vcvars64-bat-missing.6606/)
      To fix create a file called: C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\bin\amd64\vcvars64.bat In the file put the text CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64

    2. Set-up environment:
      run "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall" amd64
      Console text should go yellow after above command.
      (See here for options other than amd64: https://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx)

    3. Compile test program: (do this while cmd text is still yellow)
      cl hello.c
      (assuming your test program is called hello.c)

    4. Run test program:
      hello.exe

    C compiler now tested.

    1. Install python 2.7: (Nuitka needs this even if the python code is 3.x)
      run python-2.7.6.amd64.msi (from https://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi)

    2. Install python 3.4: (Anaconda stack seems to be the sanest way to get this on Windows)
      run Anaconda3-2.3.0-Windows-x86_64.exe (from https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.3.0-Windows-x86_64.exe)

    3. Install Nuitka: (newer versions all the time so better check http://nuitka.net/pages/download.html)
      run Nuitka-5.1.143.win-amd64.py34.msi (from http://nuitka.net/releases/Nuitka-5.1.143.win-amd64.py34.msi)

    All install now done!

    1. Test Nuitka: (assuming your test program is hello.py)
      "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall" amd64
      nuitka --standalone --portable hello.py
      cd hello.dist
      hello.exe

    On the first usage of nuitka it gave this notice: "Nuitka will make use of Dependency Walker (http://dependencywalker.com) tool to analyze the dependencies of Python extension modules. Is it OK to download and put it in APPDATA (no installer needed, cached, one time question). Proceed and download? [Yes]/No". I said yes and then the hello world program worked.

    Hello world worked after this procedure but some imports on more complicated programs cause warnings. Will edit my answer when I figure that one out. Or will ask another question if I can't figure it out.