Pydoc создает неполную документацию
Я создал свой первый пакет и заметил, что документация, которая появляется, когда пользователь звонит help(my_package)
является неполным. Было бы неплохо, чтобы при вызове перечислялись классы, методы, функции и атрибуты. help()
, И в идеале описание функций из docstring
s.
Чтение pydoc
Документация, я до сих пор не знаю, как это сделать, так как предоставленная информация немного скудна.
Когда я правильно понял, "вывод" для help()
автоматически создается, когда пользователь вызывает эту функцию? Или я должен предоставить и указать что-то дополнительное?
В настоящее время это выглядит так, когда я звоню help()
на моем пакете (здесь: pdbsr):
Help on package pdbsr:
NAME
pdbsr
FILE
/.../pdbsr/__init__.py
PACKAGE CONTENTS
bugtest (package)
exceptions (package)
extras (package)
info (package)
pdbfile (package)
SUBMODULES
pdb_properties
slide
DATA
__version__ = '0.1.0'
l2lvl = ['HEADER LANTIBIOTIC-BINDING-PROTEIN 06-JUL-12 ...
l3eiy = ['HEADER HYDROLASE 17-SEP-08 ...
s2lvl = 'HEADER LANTIBIOTIC-BINDING-PROTEIN ... 0 0...
s3eiy = 'HEADER HYDROLASE ... 0 13...
VERSION
0.1.0
И когда я вызываю подмодули, например, pdbsr.exceptions:
Help on package pdbsr.exceptions in pdbsr:
NAME
pdbsr.exceptions
FILE
/.../pdbsr/exceptions/__init__.py
PACKAGE CONTENTS
pdb_exceptions
(END)
Вот краткий обзор моей текущей структуры папок:
И мой установочный файл в настоящее время выглядит так:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
setup(
name='pdbsr',
version='0.1.0',
description='Protein Structure File Utilities',
long_description=open('README.rst').read() + '\n\n' +
open('HISTORY.rst').read(),
author='Sebastian Raschka',
author_email='...',
license=open('LICENSE').read(),
#url='...',
packages = [
'pdbsr',
'pdbsr.bugtest',
'pdbsr.exceptions',
'pdbsr.pdbfile',
'pdbsr.extras',
'pdbsr.info'
],
package_dir={'pdbsr': 'pdbsr'},
package_data={'': ['LICENCE']},
install_requires=[''],
include_package_data=True,
)
И это содержание моего высшего __init__.py
файл:
from info.version import __version__
from pdbfile.new_pdb import *
from pdbfile.load_pdb import *
from pdbfile.pdb_lig import *
from pdbfile.pdb_prot import *
from bugtest.doct_2lvl import *
from bugtest.doct_3eiy import *
import extras.slide_functions as slide
2 ответа
Каждый из ваших классов и функций, как внутри, так и за пределами классов, должен иметь строку кода * в коде *, как показано ниже, тогда help поможет сделать его волшебным:
class SomeClass():
""" Documentation at a high level about the class """
def ClassMethod():
""" Documentation about class method """
# Actual Code
Скопировано из комментариев:
дело в том, что все мои классы и методы уже имеют строки документации, как вы описали. Например, когда я вызываю справку (pdbsr.NewPdb), у этого класса все нормально, но класс не отображается в общей справке (pdbsr) - это то, что беспокоит меня - Себастьян Рашка
Вы пытались использовать __all__ = ["package_item", ] в файлах __init__.py, а не из???? импорт * заявления?
да, я попробовал это сначала и действительно не мог заставить это работать со всеми = [...] - я не знаю почему. Моя цель заключается в том, чтобы все классы и функции были доступны, например, pdbsr.function() без использования более чем 1-точечной записи для подпакетов. Как бы вы сделали это, учитывая все мои структуры папок? Я также пытался использовать all в файлах __init__ подпакетов, но по какой-то причине не смог заставить его работать:(
Я думаю - при просмотре справочной информации вам нужно иметь в каждом из подмодулей __init__.py и '__all__ = [...]', где... заменяется запятым списком имен в кавычках того, что он включает из этого модуля в случае "импорта из модуля *" - когда я впервые начал использовать модули, я пропустил, что это был список имен, а не список объектов.
Проблема в том, что сначала нужно запустить pydoc на модуле, а затем каждый py-файл внутри модуля. Я использую Windows, поэтому я добавил SET PYTHONPATH=C:/Python27 в файл CMD. bde- мой пакет, помещенный в site-packages, и внутри него есть несколько скриптов.
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde
Когда вы запустите pydoc для имени модуля, вы получите.html в вашем текущем каталоге, который содержит сводку из файла init.py и ссылки на все включенные файлы. Но им нужна цель, чтобы ссылки работали.
Так что просто запустите pydoc снова для каждого подмодуля:
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.auto_model
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.settings
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.static
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.validate_csv
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.model
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.mixin
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.create_table
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.make_model
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.apply
%PYTHONPATH%/python %PYTHONPATH%\lib\pydoc.py -w bde.copy_data
Тогда у вас будет полное HTML-дерево со всеми ссылками на файлы. И так далее, если у вас есть sub-sub модули. Если у вас есть некоторые встроенные модули, такие как sys, они не будут связываться, но вы также можете запустить pydoc на них.