Как использовать автоматическую документацию Sphinx, когда файл Python не компилируется - PullRequest
1 голос
/ 02 октября 2009

Сегодня этот вопрос еще сложнее, потому что мне не повезло с использованием функции поиска на домашней странице Сфинкса сегодня.

У меня есть группа модулей, которые я хочу документировать из строк документации. Однако это не чистые скрипты Python. Они не будут скомпилированы как есть, потому что они запускаются из приложения C #, которое создает новую переменную в исполняемой области.

Для компилятора Python, похоже, у меня есть неопределенный метод (который, технически, я делаю, пока C # не создаст механизм сценария IronPython и не создаст метод).

Когда я бегу:

sphinx-build -b html output/html

Я получаю:

NameError: name 'injected_method' is not defined

Как заставить Sphinx игнорировать ошибки компиляции и просто генерировать мою документацию?

EDIT:

Если кто-нибудь знает, если альтернатива Sphinx (например, Epydoc) не должна компилировать скрипт Python для получения сигнатур функций и строк документации, это также будет полезно. Sphinx - самый красивый генератор документации, но я откажусь от него, если придется.

Ответы [ 3 ]

3 голосов
/ 02 октября 2009

Ну, вы можете попробовать:

  • Завершение использования injected_method в попытке / исключении.
  • Написание скрипта, который отфильтровывает весь python-код, выполняемый во время импорта, и передает результат в Sphinx.
  • Ты мог бы ... хорошо, у меня больше нет идей. :)
0 голосов
/ 02 октября 2009

Хорошо, я нашел способ обойти ошибки.

При настройке встроенной среды сценариев вместо использования:

ScriptScope.SetVariable("injected_method", myMethod);

Я сейчас использую:

ScriptRuntime.Globals.SetVariable("injected_method", myMethod);

А затем в сценарии:

import injected_method

Затем я создал фиктивный файл injected_method.py в моем пути поиска, который пуст. Я удаляю фиктивный файл во время сборки моего проекта C #, чтобы избежать любых конфликтов.

0 голосов
/ 02 октября 2009

Возможно, вы могли бы определить injected_method как пустую функцию, чтобы документация работала. Вам нужно убедиться, что определение injected_method, которое вы вводите, происходит после новой заглушки injected_method.

#By empty function I mean a function that looks like this
def injected_method():
  pass
...