Ich habe ein Python-Modul geschrieben, das ein in C geschriebenes Submodul enthält: Das Modul heißt foo
und der C-Teil ist foo._bar
. Die Struktur sieht so aus:Verwenden von Sphinx mit einer distutils-gebauten C-Erweiterung
src/
foo/__init__.py <- contains the public stuff
foo/_bar/bar.c <- the C extension
doc/ <- Sphinx configuration
conf.py
...
foo/__init__.py
Importe _bar
es zu erweitern, und die nützlichen Dinge in der foo
Modul ausgesetzt. Dies funktioniert gut, wenn es gebaut wird, aber offensichtlich wird nicht in kompilierter Form arbeiten, da _bar
nicht existiert, bis es gebaut ist.
Ich möchte Sphinx verwenden, um das Projekt zu dokumentieren, und die autodoc Erweiterung auf dem foo
Modul verwenden. Das bedeutet, dass ich das Projekt erstellen muss, bevor ich die Dokumentation erstellen kann.
Da ich mit distutils gebaut habe, endet das eingebaute Modul in einem variabel benannten Verzeichnis build/lib.linux-ARCH-PYVERSION
- was bedeutet, dass ich das Verzeichnis nicht einfach in eine Sphinx 'conf.py
codieren kann.
Also, wie konfiguriere ich meine Distutils setup.py
Skript, um den Sphinx-Builder über das eingebaute Modul laufen zu lassen?
Für Vollständigkeit, hier ist der Aufruf von setup
(die ‚fake‘ Dinge sind benutzerdefinierte Builder, die build
und build_ext
Unterklasse):
setup(cmdclass = {
'fake': fake,
'build_ext_fake' : build_ext_fake
},
package_dir = {'': 'src'},
packages = ['foo'],
name = 'foo',
version = '0.1',
description = desc,
ext_modules = [module_real])
Das ist ein ziemlich guter Ansatz - ich könnte das richtig in 'conf.py' (denke ich) setzen. Ich werde es morgen versuchen. – detly
Aha ... Ich musste 'build_lib', nicht' build_temp' verwenden und mit meiner Cross-Kompilation herumspielen, aber es scheint zu funktionieren (und auch auf dem Erweiterungsteil, als zusätzlichen Bonus!) – detly
Cool, wenn Sie möchten, dass ich weitere Details hinzufügen kann (oder fügen Sie eine Antwort mit Ihren genauen Schritten hinzu, damit andere davon profitieren können). – TryPyPy