Showing posts with label mingw. Show all posts
Showing posts with label mingw. Show all posts

Wednesday, September 23, 2015

PyQt5 on WinPython with mingw

Getting PyQt5 running on WinPython required a lot of tweaking. WinPython (32 bit) 2.7.10.2 comes with mingw. This is installed in E:\WinPython-32bit-2.7.10.2\python-2.7.10\share\mingwpy. Following the instructions on the PyQt5 download page I first downloaded SIP from this page. I downloaded the zip file for windows. Following these instructions I configured sip for mingw by running

python configure.py --platform win32-g++

The next step then is to run make. However if you start a WinPython Command Prompt you do not have make. I fixed this by copying an old msys installation, from an older (not connected to WinPython) mingw installation, to the mingw folder in the WinPython folder (as noted above). Then by changing the fstab file in msys/1.0/etc to this e:/WinPython-32bit-2.7.10.2/python-2.7.10/share/mingwpy/ /mingw I have a msys system setup for working with the mingw from the WinPython distribution. From a msys shell I can then run make and make install for sip.

Next step is to do the same for PyQt5 download. However, there the configure.py script does not recognize the --platform switch. Use the --spec=win32-g++ switch is also not good enough. The problem is that it somehow still puts "windows" commands in the Makefiles it generates for rename, deleting files folders etc. I could only fix this by changing some code in the configure.py script. In the function run_qmake I added the lines

args.append('-spec')
args.append('win32-g++')

(do this before the "if recursive:" statement). While you are busy editing the configure.py file you can also follow the advice in this forum post to handle any issues with mismatching licenses. Somehow configure.py was detecting a different Qt version. This version was actually located in the site-packages/PyQt4 folder (in WinPython-32bit-2.7.10.2/python-2.7.10). By temporarily renaming this PyQt4 folder you can fix this issue.

After this. If you run

python configure.py --spec=win32-g++

from a msys shell should create the right Makefile (note that this means you have to put WinPython in your system path (environment variables in control panel from advanced system settings in the control panel of windows) because otherwise you have no python in your msys shell. Then you can run make and make install from the msys shell.

Then you are almost done. If at this stage you run a PyQt5 python script it will probably complain that it 'Failed to load platform plugin "windows"'. This was a tricky one to solve. For c++ qt applications it is usually enough to copy the plugins folder to the location of your executable (+ any other needed qt dll's), but what is the location of your executable in this case? I only managed to get it running by adding a new environment variable:

QT_QPA_PLATFORM_PLUGIN_PATH='E:\Qt\5.5\mingw492_32\plugins'

Friday, February 22, 2013

Location drive specification MinGWPortable

A long time ago I found a portable version of MinGW somewhere on the web. It is sometimes very convenient to have a gcc compiler ready to run on a computer that is not your own. However, I used it mainly on one computer and when I finally did try to run it on a different machine it didn't work. The problem was that it was looking for the MinGW and msys stuff on the wrong drive. Although not very portable it is easy to change this as long as you remember that msys emulated a unix environment! Just change the drive in

/etc/fstab

It took me some time to find this. But instead of searching myself I could have looked here.

Somehow I am no longer able to find my original MinWGPortable on the web anymore. That is a pity because the msys terminal is extremely nice: you can resize it in any direction! Perhaps I should have another look here.

Sunday, October 28, 2012

pythonxy cython mingw problems

Again I was having issues using a cython compiled package with pythonxy. For some reason when running from a ipython terminal started from pythonxy, I would get a DLL load error. If I would run the python/cython program directly (i.e. from a dos box: python my_program.py) then it would run fine. By default if you compile a program with mingw you need a dll with the std c or c++ library (typically this dll has a difficult name as libgcc_s_dw2-1.dll). As I have mingw installed in more than one location (32bit, 64bit, QtSDK, Python(x,y)) I think it cannot find the right dll (although I could not detect which dll it was using). The problem can be most easily solved if you link the std library statically. This you can do by simply adding "stdc++" to your libraries field in setup.py.

So my new setup.py looks now something like

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy

ext_modules = [Extension("BvL_cython",["model_cython.pyx"],\
    libraries=["m","stdc++"],include_dirs=[numpy.get_include()])]

setup(
    name= 'Model class',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
)

(This also shows how to automatically detect the location of the numpy include directories)