Как сделать строку документации для gae для модуля роутера python?
Я хочу сделать документацию для моего модуля маршрутизатора в gae. Я также знаю, что это должно быть первым делом в модуле (после типа кодировки файла).
Дело в том, что если вы запустите этот модуль один, вы получите только ошибку импорта (No module named webapp2
). Я хотел напечатать строку документации при запуске только файла, но эта ошибка импорта просто не позволяла мне. Есть какой-либо способ сделать это?
Я старался:
if __name__ == "__main__":
print help(self)
И другие комбинации, но безуспешно.
[РЕДАКТИРОВАТЬ]
Нет конкретного кода. Может быть пример appengine:
# coding: utf-8
""" docstring """
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
1 ответ
ImportError
происходит, когда вы запускаете его как отдельный, потому что он не будет включать в себя "магию", которая включается при запуске в качестве приложения. Например, если вы посмотрите на dev_appserver.py
(просто базовый, который вы используете для запуска сервера разработки), вы увидите эту функцию:
def fix_sys_path(extra_extra_paths=()):
"""Fix the sys.path to include our extra paths."""
extra_paths = EXTRA_PATHS[:]
extra_paths.extend(extra_extra_paths)
sys.path = extra_paths + sys.path
Здесь вы можете увидеть, что sys.path
изменяется, чтобы включить некоторые "дополнительные" пути, и если мы посмотрим на один из них, вы увидите webapp2
(а также дополнительные библиотеки, представленные в SDK):
EXTRA_PATHS = [
# ...other similar setups...
os.path.join(DIR_PATH, 'lib', 'webapp2'),
# ...other similar setups...
]
Вы можете видеть, что GAE выполняет некоторые дополнительные шаги за кулисами, чтобы вы могли сказать import webapp2
без проблем. Поэтому, когда вы попытаетесь запустить его самостоятельно, вы получите эту ошибку, потому что ваша система просто проверяет стандартные пути для webapp2
(который вы, вероятно, не установили).
И это на самом деле совсем не отвечает на ваш вопрос:) Что касается этого, я уверен, что есть определенно более элегантные / подходящие способы справиться с этим, но одну вещь, которую вы можете попробовать, - это обернуть ваш импорт (ы) в try/except
блок и на ImportError
, проверяя, запускаете ли вы модуль напрямую. Если это так, вызовите строку документации модуля и выйдите. Обратите внимание, что это всего лишь пример - вы хотели бы сделать это более изысканным, если бы вы действительно использовали его:
"""Module information."""
import sys
try:
import webapp2
except ImportError:
if __name__ == '__main__':
print __doc__
else:
print 'Webapp2 not found'
sys.exit(1)
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
Это напечатает Module information
если вы запустите его напрямую.