On 07/11/2017 02:23, Chris Angelico wrote:
On Tue, Nov 7, 2017 at 12:52 PM, bartc <b...@freeuk.com> wrote:
Cython seems very confusing to me.
Otherwise what /I/ would look for is ways to call C functions inside shared
libraries (.dll and .so). That requires that the modules under test be
wrapped as a shared library, which may be extra effort (but it will still be
using C, so with familiar tools and no crossover with Python at this point).
To call shared library C functions from Python I think involves the ctypes
module (I've never done it). Googling 'ctypes shared library' gives some
promising results.
The point of Cython is to make this easier. It's worth learning.
My experience is different.
I created a function fred() in a C module, then linked that into a .dll
(.so on Linux should be similar).
Then I wrote this code, adapted from the first hit I found for 'python
ctypes example':
import ctypes
testlib = ctypes.CDLL('c:/c/c.dll')
testlib.fred()
And it worked perfectly (on Py2 and Py3). (I understand passing
arguments is a bit more complicated, but at least you have a working base.)
Then I tried the first example I saw for 'cython examples' which was
this, first create a .pyx file as suggested, then:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("helloworld.pyx"))
It spend several seconds thinking about it, then I got this enlightening
error report:
17.299999999999997
Traceback (most recent call last):
File "c:\langs\a.py", line 10, in <module>
from distutils.core import setup
File "c:\python36\lib\distutils\core.py", line 16, in <module>
from distutils.dist import Distribution
File "c:\python36\lib\distutils\dist.py", line 10, in <module>
from email import message_from_file
ImportError: cannot import name 'message_from_file'
That was Py3; on Py2, I had 30 seconds of disk activity, and nearly full
memory that almost stalled my machine before I aborted it. (Actually I
mispelled both 'cythonize's in the example; it didn't make any difference).
And I still have no idea how to relate this to calling a native C
function in an external shared library.
--
bartc
--
https://mail.python.org/mailman/listinfo/python-list