Как скомпилировать и связать несколько модулей (или пакетов) python с помощью cython?

У меня есть несколько модулей python (организованных в пакеты), которые зависят друг от друга . например

  • Module1
  • Module2: импорт Module1
  • Module3
  • Модуль 4: импортирует модуль 3, модуль 2, модуль 1

Предположим, что соответствующий интерфейс для разработки приложений находится в модуле 4, и я хочу сгенерировать Module4.so с использованием cython . Если я начну наивно, я получаю расширение Module4.so, которое я могу импортировать, но расширение использует исходный код python Module1, Module2, Module3.

Есть ли способ скомпилировать, чтобы модули Module1, Module2, Module3 были скомпилированы и связаны с Module4? Я хотел бы избежать выполнения всего вручную , например, сначала скомпилировать Module1.so, а затем изменить объявление импорта в Module2, чтобы импортировать Module1.so, а не Module1.py, затем скомпилируйте Module2 в Module2.so и так далее ….

Благодаря!

Редактировать. Первые два варианта относятся к конкретному коду Cython, то, что я пропустил, заключается в том, что речь идет о чистых модулях python, поэтому вариант 3 является решением.

Есть несколько вариантов:

1. См. «Как создать иерархию модулей в пакете»: https://github.com/cython/cython/wiki/PackageHierarchy

2. Я предпочитаю оператор «include»: http://docs.cython.org/src/userguide/language_basics.html#the-include-statement У меня есть много .pyx-файлов, и все они включены в main.pyx, это все в одном пространстве имен. Результатом этого является один большой модуль: http://code.google.com/p/cefpython/source/browse/cefpython.pyx

3. Вы можете скомпилировать все свои модули сразу с помощью настройки, добавив несколько «расширений»:

setup( cmdclass = {'build_ext': build_ext}, ext_modules = [Extension("example", sourcefiles), Extension("example2", sourcefiles2), Extension("example3", sourcefiles3)] ) 

4. Более эффективная компиляция – см. Здесь .

 setup ( name = 'MyProject', ext_modules = cythonize(["*.pyx"]), )