Jak używać Sphinxa z Cythonem?
Niedawno Cythonized mój projekt, zmieniając nazwę wszystkich modułów (z wyjątkiem najwyższego poziomu__init__.py
) do*.pyx
i kładącext_modules = [Extension('foo', ['foo.pyx'])]
wsetup.py
. Budowa i instalacja działa dobrze. Jednak kiedy to robięcd doc; make html
, Sphinx zawodzi, ponieważ nie może zaimportować żadnego z modułów, które są teraz*.pyx
.
Jeśli będę edytowaćdoc/conf.py
i zmienićsys.path.insert(0, os.path.abspath('..'))
dosys.path.insert(0, os.path.abspath('../build/temp.linux-x86_64-2.7'))
, następnie Sphinx może znaleźć wszystkie moduły i wygenerować dokumentację, ale w takim przypadku otrzymuję błędy takie jakerror while formatting arguments for foo.bar: <built-in function bar> is not a Python function
. Prawdopodobnie jest tak, ponieważ teraz Sphinx ma dostęp tylko do*.so
pliki, a nie pliki źródłowe. To samosys.path
modyfikacja umożliwia również uruchamianie dokumentów przez Sphinx (make doctest
).
Innym rozwiązaniem, którego próbowałem, było użycie rozszerzenia*.py
zamiast*.pyx
(i używającext_modules = [Extension('foo', ['foo.py'])]
wsetup.py
). W tym przypadku dokumentacja buduje się poprawnie, ale myślę, że doctests teraz pomijają Cythona.
Nie udało mi się znaleźć żadnych informacji online dotyczących używania Sphinx i Cython razem. Sprawdziłem kod źródłowy niektórych projektów, które używają obu, ale nie wydają się korzystać z docstrings w*.pyx
pliki. Wiem, że Sage to robi, ale ten projekt jest zbyt skomplikowany, abym mógł go rozdzielić.
Czy Sphinx obsługuje dokumenty w plikach Cython? Jeśli tak, jak mam to zrobić?