Cython не видит файл .pxd - PullRequest
0 голосов

Я создаю совершенно новый проект в pycharm и хочу скомпилировать два файла .pyx. Один из этих файлов использует код второго. Структура проекта на данный момент следующая: структура проекта .

Код в a.pyx:

cpdef int addTwo(int first, int second):
    return first + second

Код в b.pyx:

from a cimport addTwo

cpdef int addThree(int first, int second, int third):
    return addTwo(first, second) + third

Код в a.pxd:

cpdef int addTwo(int first, int second)

Код в заголовке:

from b import *

Код в настройке (2 изображения):

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize
import os
import Cython.Compiler.Options

Cython.Compiler.Options.annotate = True

ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) + '/'


a = Extension('a',
                sources=[ROOT_DIR + 'a.pyx'],
                extra_compile_args=["-std=c++11", "-Ofast",  "-ftree-vectorize", "-msse2"],
                extra_link_args=["-std=c++11", "-Ofast",  "-ftree-vectorize", "-msse2"],
                include_dirs=[ROOT_DIR, '.'],
                language='c++')

b = Extension('b',
                sources=[ROOT_DIR + 'b.pyx'],
                extra_compile_args=["-std=c++11", "-Ofast",  "-ftree-vectorize", "-msse2"],
                extra_link_args=["-std=c++11", "-Ofast",  "-ftree-vectorize", "-msse2"],
                include_dirs=[ROOT_DIR, '.'],
                language='c++')


modules = [a, b]

for e in modules:
    e.cython_directives = {'language_level': "3"}

setup(
    name='calc',
    ext_modules=modules,
    cmdclass={'build_ext': build_ext},
    script_args=['build_ext'],
    options={'build_ext': {'inplace': True, 'force': True}},
)

Код в тесте:

from optimization.cython_module.header import *

print(addThree(1, 2, 3))

Когда я начинаю создавать проект в настройке, все идет очень хорошо. Проблемы начинаются на этапе вызова функции addThree (). Запускаю скрипт test.py и получаю ошибку такого типа:

Traceback (most recent call last):
  File "/home/vlad/PycharmProjects/test_project/test.py", line 1, in <module>
    from optimization.cython_module.header import *
  File "/home/vlad/PycharmProjects/test_project/optimization/cython_module/header.py", line 1, in <module>
    from b import *
ModuleNotFoundError: No module named 'b'

Не понимаю, почему он не видит b.pxd. Кто знает Cython, помогите, пожалуйста.

...