2010-02-02 2 views
9

Я пишу расширение Python C, которое использует API-интерфейс pygame C. Все идет нормально. Теперь мне интересно, как я упорядочиваю исходный код, чтобы я мог иметь несколько подмодулей в пакете. Все учебные пособия сосредоточены на одном расширении файла .c. Я попробовал посмотреть некоторые файлы setup.py проектов, но они смутили мой разум со сложностью, и я не мог видеть лес для деревьев.Написание пакетов Python с несколькими модулями C

В принципе, у меня есть расширение, скажем, MyExt. MyExt имеет глобальные функции и 3 типа. Как я могу организовать списки PyMethodDef? Должен ли я поместить все их в один список? В качестве альтернативы, я заметил, что объект Extension, который вы передали функции установки, является actaully массивом модулей, поэтому как мне имя модулей, чтобы все они находились под одним пакетом и могли видеть друг друга?

Мой setup.py:

main_mod = Extension('modname', 
       include_dirs = ['C:\Libraries\Boost\include', 
           'C:\Libraries\SDL\include', 
           'C:\Libraries\SDL_image\include'], 

       libraries = ['libSDL', 
          'SDL_image'], 

       library_dirs = ['C:\Libraries\SDL\lib', 
           'C:\Libraries\SDL_image\lib'], 

       sources = ['main.cpp', 
          'Object1.cpp', 
          'Object2.cpp', 
          'Etcetera.cpp']) 

Так что, когда я называю: настройка (имя = "Некоторые Читаемые Human Name, Right", ext_modules = [main_mod]) я могу добавить другие модули ext_modules список но что я передаю в качестве первого параметра в «Расширение»? Использую ли я строку, разделенную точкой, как «mypackage.submodule»?

Как правило, как организовать расширение C с несколькими подмодулями? Если кто-нибудь может указать мне на какой-то исходный код, который легко читать и понимать, это было бы здорово. Большое спасибо!

ответ

14

Я думаю, что самый простой способ сделать это - создать пакет в «чистом питоне»; другими словами, создайте mypackage/, создайте пустой mypackage/__init__.py, а затем разместите свои модули расширения на mypackage/module1.so, mypackage/module2.so и так далее.

Если вы хотите что-то в mypackage вместо того, чтобы быть пустым, вы можете импортировать их из другого модуля расширения в свой __init__.py.

1

Я не уверен, что понял, чего вы хотите. Но есть вид пакета Python пространства имен. Вы можете поместить модуль в другое место, но все они имеют одинаковое имя пакета. Здесь вы можете ссылаться на этот вопрос How do I create a namespace package in Python?

 Смежные вопросы

  • Нет связанных вопросов^_^