2017-02-09 14 views
1

У меня есть проект Google App Engine с именем gaend. Я пытаюсь построить для него лучшую документацию, используя readthedocs. Я использовалКак создать документацию sphinx (readthedocs) для проектов Google App Engine?

> sphinx-quickstart 

для создания моего базового проекта сфинкса. Под заголовком

> sphinx-apidoc -o . ../gaend 

для создания списка API-проектов. Затем я запускаю

sphinx-autobuild . _build/html 

+--------- manually triggered build --------------------------------------------- 
| Running Sphinx v1.5.2 
| loading pickled environment... done 
| building [mo]: targets for 0 po files that are out of date 
| building [html]: targets for 0 source files that are out of date 
| updating environment: 0 added, 1 changed, 0 removed 
| reading sources... [100%] gaend 
/Users/stephen/gaend/docs/gaend.rst:10: WARNING: autodoc: failed to import module u'gaend.bigquery'; the following exception was raised: 
Traceback (most recent call last): 
File "/Users/stephen/.virtualenvs/gaend/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 551, in import_object 
__import__(self.modname) 
File "/Users/stephen/gaend/gaend/bigquery.py", line 1, in <module> 
    from google.cloud import bigquery 
ImportError: No module named google.cloud 
... 
ImportError: No module named google.appengine.ext 

Я признаю, что проблема в том, что у него нет доступа к Google Cloud SDK. У меня были аналогичные проблемы с запуском моего модульного теста, и работа над этим была выполнена в runner.py. Тем не менее, это зависит от наличия Google Cloud SDK (с установленным модулем Python Google App Engine) где-то в моей системе. Как я могу получить Google Cloud SDK (и Python GAE) на сервере readthedocs, который создает мою документацию?

ответ

1

Я была такая же проблема, я не помню, где я нашел решение и, возможно, не решить вашу проблему, но я решил мину, добавив путь google_appengine папку и google_appengine/lib/yam/lib папку в conf.py файл в папке источника внутри папка Sphinx документ, что-то вроде этого:

В conf.py:

sys.path.insert(0, os.path.abspath('../../')) 
sys.path.insert(1, '<your local full path>/google_appengine') 
sys.path.insert(1, '<your local full path>/google_appengine/lib/yaml/lib') 

if 'google' in sys.modules: 
    del sys.modules['google'] 

, я знаю, что было бы лучше с относительным путем, но он работал на меня.

Это Sphinx необходимо запустить программу, которую вы документируете, это то, что я не понимаю, но в любом случае, это хороший инструмент.

+0

Благодаря Хуан, я сделал https://github.com/samedhi/gaend/commit/d279e0ada41c2225b23498a6bb7ddba94ae624e5. Работает локально, но, конечно, не получается, когда readthedocs пытается создать мои документы на своем сервере ... Может быть, мне не хватает какого-то шага или чего-то еще? –

0

Я просто решил ту же проблему. Там не много вопросов задают о Sphinx + GAE, поэтому я отправляю в conf.py код, который получил это работает для меня в надежде, что это помогает другим:

import os 
import sys 
project_id = 'gae-project-id' 
# environment variables that several utils are assuming are present 
if not os.environ.get('SERVER_SOFTWARE', None): 
    os.environ['SERVER_SOFTWARE'] = 'Development-'+project_id 
if not os.environ.get('APPLICATION_ID', None): 
    os.environ['APPLICATION_ID'] = 'dev~'+project_id 
# project root 
sys.path.insert(0, os.path.dirname(__file__)) 
# downloaded third party libs 
sys.path.insert(0, os.path.dirname(__file__)+"/lib") 
# path to gae sdk 
sdk_path = os.path.join('~/google-cloud-sdk', 'platform/google_appengine') 
try: 
    import google 
    google.__path__.append("{0}/google".format(sdk_path)) 
except ImportError: 
    pass 
sys.path.insert(0, os.path.expanduser(sdk_path)) 
import dev_appserver 
dev_appserver.fix_sys_path()