Я создаю совершенно новый проект в 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, помогите, пожалуйста.