2010-02-02 4 views
9

J'écris une extension Python C qui utilise l'API C de pygame. Jusqu'ici tout va bien. Maintenant je me demande comment j'organise mon code source pour que je puisse avoir plusieurs sous-modules dans le paquet. Tous les didacticiels disponibles sont axés sur les extensions de fichier .c. J'ai essayé de regarder des fichiers setup.py de certains projets, mais ils ont soufflé mon esprit avec la complexité, et je ne pouvais pas voir la forêt pour les arbres.Écrire des paquets Python avec plusieurs modules C

Fondamentalement, j'ai une extension, disons MyExt. MyExt a des fonctions globales, et 3 types. Comment puis-je organiser les listes PyMethodDef? Dois-je les mettre tous dans une liste? Sinon, j'ai remarqué que l'objet Extension que vous avez passé à la fonction d'installation est en fait un tableau de modules, alors comment puis-je nommer les modules afin qu'ils soient tous sous un même package et puissent se voir les uns les autres?

Mon 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']) 

Alors quand je l'appelle: la configuration (name = "? Certains Nom Human Readable, Droite", ext_modules = [main_mod]) Je peux ajouter d'autres modules à la liste ext_modules mais qu'est-ce que je passe comme premier paramètre à 'Extension'? Est-ce que j'utilise une chaîne séparée par des points comme 'mypackage.submodule'? Plus généralement, comment organiser une extension C avec plusieurs sous-modules? Si quelqu'un peut me diriger vers un code source qui est facile à lire et à comprendre, ce serait génial. Merci beaucoup!

Répondre

14

Je pense que la façon la plus simple de le faire serait de créer le paquet dans "pure python"; en d'autres termes, créez mypackage/, créez un mypackage/__init__.py vide, puis placez vos modules d'extension sur mypackage/module1.so, mypackage/module2.so, et ainsi de suite.

Si vous souhaitez que les éléments soient mypackage au lieu d'être vides, vous pouvez les importer d'un autre module d'extension dans votre __init__.py.

1

Je ne suis pas sûr que j'ai compris ce que vous voulez. Mais il y a une sorte de paquet Python d'espace de noms. Vous pouvez placer le module à un endroit différent, mais tous partagent le même nom de package. Ici vous pouvez faire référence à cette question How do I create a namespace package in Python?

Questions connexes