0

I have a simple project directory and some simple files which failed to compile.

Directory structure:

cythonize: ROOT
|___ cythonize
    |___ __init__.pxd
    |___ __init__.py
    |___ first.pxd
    |___ first.pyx
    |___ second.pxd
    |___ second.pyx
|___ README.md
|___ setup.py

Let me show what are the exact content in every file.

__init__.pxd:

<EMPTY FILE>

__init__.py:

<EMPTY FILE>

first.pxd:

cdef class MyClass:
    cdef str good
    cdef str bad

    cdef str say(self, str x, str y)

first.pyx:

cdef class MyClass:

    cdef str say(self, str x, str y):
        return x

second.pxd:

from . cimport first # removing this does not help

second.pyx:

#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    return first(a, b)

Objective

I am simply trying to cimport first from first.pxd into second.pyx in order to use first in second.pyx.

Compilation Errors

>>> cythonize -i -k -3 cythonize/second.pyx
Compiling C:\...\cythonize\cythonize\second.pyx because it changed.
[1/1] Cythonizing C:\...\cythonize\cythonize\second.pyx

Error compiling Cython file:
------------------------------------------------------------
...
#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    ^
------------------------------------------------------------

cythonize\second.pyx:5:5: 'first' is not a type identifier

Error compiling Cython file:
------------------------------------------------------------
...
#cython language_level=3

from . cimport first

cdef first second(str a, str b):
    return first(a, b)          ^
------------------------------------------------------------

cythonize\second.pyx:6:11: 'first' is not a constant, variable or function identifier
Failed compilations: cythonize.second

Maybe one can show what is the minimum viable example that can make this work?

1 Answer 1

-2

This error message:

cythonize\second.pyx:5:5: 'first' is not a type identifier

Tells you that 'first' is not the name of an object type. It is the name of the file. You are importing the file and its objects, but you cannot build an object of the entire file.

For example, you could do

cdef first.MyClass1

as a type.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.