Search code examples
cythondevelopment-environment

How to set up a windows cython environment from scratch?


I have been searching on the internet for hours to find out how to make cython work with no success.

I am on windows , i use python3 with Anaconda and i also have Codeblocks using the mingw GCC compiler.

I would like to be able to run even the most basic code (like 'helloworld') with cython because untill now i've only encountered errors i don't understand. They may come from an unstable developping environment so this is why i ask this question.

The main errors happen when translating the .pyx code to .c and even when i achieve that there are even more errors on the .c generated.


here is my 'helloworld.pyx' :

print('Hello Wolrd')

here is my setup.py :

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('helloworld.pyx'))

when i run python3 setup.py i get ModuleNotFoundError: No module named 'Cython'

when i run cython helloworld.pyx , I get a file helloworld.c but when i run it in Codeblocks i get the error Python.h : no such file or directory

so i temporary fixed it by puting the absolute path in the include command but i still get errors.


i also tried using python setup.py build_ext --inplace but i get

running build_ext
building 'helloworld' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -DMS_WIN64 -IC:\Users\Julien\anaconda3\include -IC:\Users\Julien\anaconda3\include -c helloworld.c -o build\temp.win-amd64-3.7\Release\helloworld.o
In file included from C:\Users\Julien\anaconda3\include/Python.h:87:0,
                 from helloworld.c:4:
C:\Users\Julien\anaconda3\include/pytime.h:123:59: warning: 'struct timeval' declared inside parameter list
C:\Users\Julien\anaconda3\include/pytime.h:123:59: warning: its scope is only this definition or declaration, which is probably not what you want
C:\Users\Julien\anaconda3\include/pytime.h:131:5: warning: 'struct timeval' declared inside parameter list
C:\Users\Julien\anaconda3\include/pytime.h:136:5: warning: 'struct timeval' declared inside parameter list
helloworld.c:201:41: warning: division by zero
helloworld.c:201:12: error: enumerator value for '__pyx_check_sizeof_voidp' is not an integer constant
error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1

I followed tutorials to install mingw (it works for coding in C in codeblocks so I should have installed it properly) and I verified that Cython was correctly installed in Python libraries. What did I do wrong ??


Solution

  • Ok so the problem was effectively in the compilers.

    the problem was because my mingw compiler was not correct : i suggest following these instructions which you will find at https://wiki.python.org/moin/WindowsCompilers.

    /!\ do not forget to install setuptools on your python environment (using the command given works for me)

    this should at least allow you to make the basic tutorial for cython