I'm creating a project that uses Python OpenCV. My image processing is a bit slow, so I thought I can made the code faster by creating a .pyd
file (I read that somewhere).
I am able to create a .c
file using Cython, but how to make a .pyd
? While they are a kind of .dll
, should I make a .dll
first and convert it? And I think they're not platform-independent, what are equivalents on Unix?
Thanks for any help!
Prerequisites
Cython
MinGW-w64 added to your PATH environment variable
You need to add a function called inityourfilename to your .py file Then have to make a .c file by
cython --embed yourfile.py
Then you need to compile it into a .o file using gcc replace the text after -I with the path to your Python include folder
If your MinGW is 64 bit then this command
gcc -mdll -O -Wall -IC:\\Users\\yourusername\\AppData\\Local\\Programs\\Python\\Python39\\include -c -DMS_WIN64 yourfile.c
If your MinGW is 32 bit remove the -DMS_WIN64 flag
To make the .pyd file from .o file
gcc -shared -LC:\\Users\\yourusername\\AppData\\Local\\Programs\\Python\\Python39\\libs yourfile.o -lpython39 -o yourfile.pyd
Replace text after -L with path to your libs folder
Replace -lpython39 with your python version ie -lpython38 if you have python 3.8
Now check your .pyd file by importing it into another file
You have to run a setup.py
file in a terminal. This one is an example that uses numpy
try:
from setuptools import setup
from setuptools import Extension
except ImportError:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy as np
ext_modules = [Extension("my_code_cython",["my_code_cython.pyx"]),
Extension("another_code_cython",["another_code_cython.pyx"])]
setup(
name= 'Generic model class',
cmdclass = {'build_ext': build_ext},
include_dirs = [np.get_include()],
ext_modules = ext_modules)
In the terminal (cmd in Windows) you have to execute the command
python setup.py build_ext --inplace
It is important that I suppose you have installed the compiler (Microsoft Visual C++ Compiler Package for Python 2.7 for example). You can find more information in https://github.com/cython/cython/wiki/CythonExtensionsOnWindows
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With