Как получить документацию Python в формате Texinfo Info?

Начиная с Python 2.6, кажется, что документация находится в новом reStructuredText, и создать Texinfo не так просто. Info из коробки больше нет.

Я фанат Emacs и предпочитаю, чтобы моя документация была установлена ​​в Info.

У кого-нибудь есть документы Python 2.6 или более поздней версии в формате Texinfo? Как вы их конвертировали? Или где-то есть поддерживаемая сборка?

Я знаю, что могу использовать w3m или haddoc для просмотра html-документов - я действительно хочу, чтобы они были в Info.

Я экспериментировал с Pandoc, но после нескольких небольших экспериментов он не очень хорошо справляется со ссылками между документов, а мой более масштабный эксперимент — запустить его по всем документам, сгруппированным вместе, чтобы посмотреть, что получится — все еще длится два дня с тех пор, как я его начал!

Два хороших ответа

Выделив два ответа ниже, потому что SO не позволит мне принять оба ответа:


person Matt Curtis    schedule 28.06.2009    source источник
comment
Не связанный с программированием - я полагаю, вы шутите. Мой вопрос конкретно о практике программирования в конкретной среде.   -  person Matt Curtis    schedule 29.06.2009
comment
Ваш сценарий pandoc когда-либо заканчивался?   -  person seth    schedule 17.07.2009
comment
Привет, Сет - в некотором смысле, это произошло, потому что я убил его. Мне хватило двух дней, чтобы решить, что это не лучший вариант. Мои эксперименты с меньшими файлами показали, что это не идеально. Я только начал работать над проектом rst2info — если вы (или кто-либо другой) можете помочь, я помещаю его сюда: repo.or.cz/w/rst2info.git - это будет немного тяжелая битва, потому что я не писал reStructuredText или Texinfo в своей жизни, и TBH у меня нет реальный интерес к его изучению (или docutils) сейчас.   -  person Matt Curtis    schedule 18.07.2009
comment
Я упаковал документы Python в виде страницы texinfo и выпустил пакет на MELPA, чтобы упростить их установку. Дайте мне знать, как это работает для вас.   -  person Wilfred Hughes    schedule 17.09.2013


Ответы (10)


Я упаковал документацию Python в файл texinfo.

Если вы используете Emacs с MELPA, вы можете просто установить его с помощью M-x package-install python-info.

person Wilfred Hughes    schedule 17.09.2013
comment
Отлично, вплоть до описания этого файла намеренно пусто ;-) Спасибо, Уилфред. - person Matt Curtis; 25.09.2013
comment
Предложение: может ли это подключиться к механизму C-h S? Это сделает его намного полезнее! - person Clément; 23.09.2016
comment
@Clément Клеман, хм, не уверен, насколько это будет легко. Не могли бы вы открыть проблему GitHub, описывающую, как вы представляете, как это работает? - person Wilfred Hughes; 23.09.2016
comment
Я заработал, выполнив: export INFOPATH=$HOME/.emacs.d/etc/info/python3:" в моем .bashrc, а затем скопировав python.info в эту папку. Emacs объединит все такие каталоги в `Info-default-directories'. Обратите внимание на завершающий «:» в переменной среды, чтобы не указывать каталоги по умолчанию. Я также создал файл dir в этом каталоге, который просто указывал на подмодуль python. Не уверен, что это последнее было необходимо. - person InHarmsWay; 30.09.2019

Джон Уолтман http://bitbucket.org/jonwaltman/sphinx-info разветвил sphinx и написал texinfo builder, он может собрать документацию по python (я уже сделал это). Кажется, скоро он сольется со сфинксом.

Вот быстрые ссылки для загрузки (временные):

Шаги для создания документа Python в формате texinfo:

Загрузите исходный код Python

Загрузите и установите пакет sphinx-info (в виртуальной среде)

Войдите в каталог Python/Doc из исходников python.

Отредактируйте Makefile, в цели build замените $(PYTHON) tools/sphinx-build.py на sphinx-build, затем добавьте эту цель в makefile, обратите внимание, пробел перед эхом - это TAB:

texinfo: BUILDER = texinfo
texinfo: build
    @echo
    @echo "Build finished. The Texinfo files are in _build/texinfo."
    @echo "Run \`make' in that directory to run these through makeinfo" \
          "(use \`make info' here to do that automatically)."

Отредактируйте Python/Doc/conf.py, добавив:

texinfo_documents = [
    ('contents', 'python', 'Python Documentation', 'Georg Brandl',
     'Python', 'The Python Programming Language', 'Documentation tools',
     1),
]

Затем запустите make texinfo, и он должен создать texifile в каталоге build/texinfo. Чтобы сгенерировать информационный файл, запустите makeinfo python.texi

person pygabriel    schedule 17.10.2010
comment
У меня этот вопрос открыт уже больше года, спасибо за ответ! Ранее я заметил работу Джона (см. мой ответ от 9 сентября), но не знал, что он зашел так далеко. Я только что запустил install-info python.info, и теперь у меня под рукой вся документация по Python. Потрясающий! - person Matt Curtis; 18.10.2010
comment
Можете ли вы описать шаги по созданию файлов .texi и .info? Я хотел бы иметь документы Python 2.7. - person Eddy Pronk; 21.10.2010
comment
Я добавил некоторые рекомендации, пожалуйста, сообщите мне, если у вас возникли проблемы с этим - person pygabriel; 21.10.2010
comment
Спасибо, это работает. Мне нужен sudo ginstall-info --dir-file=/usr/local/info/dir --info-file=python.info - person Eddy Pronk; 22.10.2010

Без сомнения, было бы круто и сложно самостоятельно сгенерировать документацию Python для вашей конкретной версии Python. Просто следуйте EmacsWiki или скомпилируйте ее локально (в Debian Jessy для Python3.4.2):

sudo apt-get install python3-sphinx
cd ~/Desktop
wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2rc1.tar.xz
tar -xf Python-3.4.2rc1.tar.xz
cd Python-3.4.2rc1/Doc/
sphinx-build -b texinfo -d build/doctrees . build/texinfo
# extra time to build
cd build/texinfo/
makeinfo python.texi
# extra time for convertation

Я получил это дерево:

.                                                                                                                              
├── logging_flow.png                                                                                                           
├── Makefile                                                                                                                   
├── pathlib-inheritance.png                                                                                                    
├── python.info                                                                                                                
├── python.info-1                                                                                                              
├── python.info-10                                                                                                             
├── python.info-11                                                                                                             
├── python.info-12                                                                                                             
├── python.info-13                                                                                                             
├── python.info-14                                                                                                             
├── python.info-15                                                                                                             
├── python.info-16                                                                                                             
├── python.info-17                                                                                                             
├── python.info-18                                                                                                             
├── python.info-19                                                                                                             
├── python.info-2                                                                                                              
├── python.info-20                                                                                                             
├── python.info-21                                                                                                             
├── python.info-22                                                                                                             
├── python.info-23                                                                                                             
├── python.info-24                                                                                                             
├── python.info-25                                                                                                             
├── python.info-26                                                                                                             
├── python.info-27                                                                                                             
├── python.info-28                                                                                                             
├── python.info-29                                                                                                             
├── python.info-3                                                                                                              
├── python.info-30                                                                                                             
├── python.info-31                                                                                                             
├── python.info-32                                                                                                             
├── python.info-33                                                                                                             
├── python.info-34                                                                                                             
├── python.info-4                                                                                                              
├── python.info-5                                                                                                              
├── python.info-6                                                                                                              
├── python.info-7                                                                                                              
├── python.info-8                                                                                                              
├── python.info-9                                                                                                              
├── python.texi                                                                                                                
├── python-video-icon.png                                                                                                      
├── tulip_coro.png                                                                                                             
└── turtle-star.png

И теперь можно просматривать документацию по python в Emacs с помощью

C-u C-h я python-информация RET

python-info — это имя файла (четвертое в дереве выше) и даже добавление в закладки некоторых произвольных узлов для привычного и регулярного удобства просмотра.

person Alioth    schedule 11.03.2017
comment
Это здорово, спасибо! Похоже, они исправили это со времен темных веков 2009 года. Учитывая популярность MELPA, я думаю, что ответ Уилфреда будет полезен большему количеству людей, поэтому я оставлю этот вариант отмеченным, но если бы я мог принять два ответа, я бы определенно принял этот. . Я отредактирую описание, чтобы этот ответ стал более заметным. - person Matt Curtis; 03.04.2017
comment
Это круто! Я заметил, что есть Makefile, созданный после сборки sphinx, мы также можем использовать его для создания файла .info (make info) и информации об установке (make install-info). - person Student222; 18.10.2019

Для тех, кто следит за этим вопросом в надежде получить ответ, я нашел другую реализацию rst2texinfo, которую вы, возможно, захотите попробовать:

http://bitbucket.org/jonwaltman/rst2texinfo/src

person Matt Curtis    schedule 09.09.2010

Другой «обходной путь» — выполнить pydoc, как предложил Nikokrock, прямо в Emacs:

(defun pydoc (&optional arg)
  (interactive)
  (when (not (stringp arg))
    (setq arg (thing-at-point 'word)))

  (setq cmd (concat "pydoc " arg))
  (ad-activate-regexp "auto-compile-yes-or-no-p-always-yes")
  (shell-command cmd)
  (setq pydoc-buf (get-buffer "*Shell Command Output*"))
  (switch-to-buffer-other-window pydoc-buf)
  (python-mode)
  (ad-deactivate-regexp "auto-compile-yes-or-no-p-always-yes")
)
person wr.    schedule 01.07.2009
comment
Спасибо вр. Это главный совет по использованию Python в Emacs в целом, но он не отвечает на вопрос. - person Matt Curtis; 02.07.2009

Майкл Эрнст использовал для поддержки форматов Info документов Python:

http://www.cs.washington.edu/homes/mernst/software/#python-info

Вы можете попробовать использовать его make-файл и скрипт html2texi для создания обновленной версии. Оба связаны по указанному выше URL. Я не уверен, насколько хорошо он работает сейчас (последняя версия была примерно в 2001 году), но его скрипт хорошо прокомментирован (grep для «python»).

person ars    schedule 03.07.2009

Документы Python теперь создаются с использованием инфраструктуры Sphynx. Этот фреймворк не имеет выходного формата texinfo. В настоящее время он имеет:

  1. HTML
  2. латекс
  3. простой текст

Возможно, вы сможете получить то, что хотите, используя вывод Latex. При выводе текста вы потеряете перекрестную ссылку.

Лично я предпочитаю использовать pydoc, когда мне нужен текстовый вывод. С Vim у меня есть ярлык для вызова pydoc и открытия окна с документом для объекта под моим курсором...

person Nikokrock    schedule 29.06.2009
comment
Спасибо Никокрок. Я знаю о Sphinx, исходный вопрос ссылается на него. Я копался, и преобразование LaTeX в Texinfo не кажется тривиальным - Pandoc кажется более многообещающим. Кажется, несколько человек смотрят этот вопрос, но ваш ответ пока единственный. Интересно, большинство программистов Python-Emacs просто живут без информации с версии 2.6? - person Matt Curtis; 30.06.2009
comment
p.s. Вот ссылки на пакет, который я нашел: members.inode .at/wjenkner/pari-info/ — я мог бы заставить работать это или Pandoc, или написать свой собственный конвертер, но я ищу способ избежать этого, если это возможно, потому что это немного отвлекает из кода, который я действительно хочу написать! :-) - person Matt Curtis; 30.06.2009
comment
В последней основной версии sphinx (1.1pre) действительно есть сборщик texinfo. - person cschol; 24.03.2011

Дистрибутив Ubuntu предоставляет пакеты pythonX.Y-doc (которые включают документацию в формате Info) по крайней мере с 18.04 (bionic); в 19.04 XY означает 2,7, 3,7 и 3,8. У пакета не так много зависимостей, я предполагаю, что его можно установить и в других дистрибутивах.

person volferine    schedule 29.10.2019

Хотите верьте, хотите нет, но проект Python на самом деле предоставляет нам способ сделать это с помощью различных файлов Makefile. Файлы используют проект Python Sphinx для создания файла texi, который makeinfo может затем преобразовать в info, формат, который Emacs использует для документации.

Помимо Python3000, эти инструкции требуют GNU Make и Texinfo. Они включены в большинство дистрибутивов Linux. В разных дистрибутивах могут использоваться разные соглашения об именах. Обратитесь к документации вашего дистрибутива за соответствующими именами пакетов. Для дистрибутивов на основе Debian:

# install make to utilize the Makefiles provided by the Python project
~/$ sudo apt-get install make

# install texinfo for the `makeinfo` command
~/$ sudo apt-get install texinfo

Имена пакетов обычно похожи для систем, отличных от Debian. Для пользователей Windows я рекомендую WSL или создать виртуальную машину .

1. Загрузите документацию

Перейдите по адресу https://www.python.org/ftp/python/ и загрузите tarball для вашей версии Python. Это будет выглядеть так:

https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz

Вы можете использовать wget для загрузки архива и tar для его распаковки. Опции x и f предназначены для извлечения файла:

# download the tarball
~/$ wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz

# extract the tarball
~/$ tar xf Python-3.7.9.tar.xz

2. Запустите make venv в Python-X.Y.Z/Doc

Sphinx требует больше зависимостей, чем входит в базовую pip установку. К счастью, проект Python предоставляет Makefile для создания необходимой среды. Подробности см. на Makefile.

# Navigate to the Doc/ directory
~/$ cd Python-3.7.9/Doc

# "create a venv with necessary tools"
~/Python-3.7.9/Doc$ make venv

# activate the venv created by make
~/Python-3.7.9/Doc$ source venv/bin/activate

3. Запустите sphinx-build

Теперь, когда правильная среда настроена, мы можем запустить Sphinx. Этот вызов создает кеш, используемый во время генерации с опцией -d. Файлы документации, найденные в текущем каталоге, конвертируются компоновщиком texinfo и выводятся в build/texinfo:

# -b: Use the textinfo builder
# -d: Create "doctree pickles" cache in doctrees/
# Use the current directory as source
# Output to build/texinfo
(venv) ~/Python-3.7.9/Doc$ sphinx-build -b texinfo -d build/doctrees . build/texinfo

4. Используйте makeinfo для создания файла info

Опять же, сопровождающие Python дали нам то, что нам нужно (даже если они плохо задокументировали это). Предыдущая команда создала файл texi вместе с другим файлом Makefile. Makefile вызывает makeinfo.

# Navigate to the output directory
(venv) ~/Python-3.7.9/Doc$ cd build/texinfo

# Run the generated Makefile
(venv) ~/Python-3.7.9/Doc/build/texinfo$ make

# Hark, unto us an info file is born
(venv) ~/Python-3.7.9/Doc/build/texinfo$ ls
Makefile  python-figures  python.info  python.texi

Подобно Индиане Джонсу, вы видите Святой Грааль. Многие погибли в этом путешествии; ты победил. Найдите минутку, чтобы отпраздновать.

Примечание. Преобразование makeinfo приводит к ошибкам. Неважно, говорю. Желанный info получен и я жадно пью из него.

5. Загрузите python.info в Emacs...

Проверьте C-h v Info-default-directory-list, где хранятся информационные файлы. Поместите туда файл python.info. В этом каталоге также должен быть файл с именем dir (если его там нет, не волнуйтесь, он будет создан). Это texinfo сгенерированный файл, содержащий список узлов. Хотя это можно изменить вручную, это чревато ошибками1.

Запустите update-info-dir в любом каталоге, который вы поместили python.info обновить dir, чтобы включить новый файл.

Для получения полной информации о системе texinfo см. https://www.gnu.org/software/texinfo/manual/texinfo/html_node/Installing-an-Info-File.html.

Если вам лень, вы также можете просто открыть файл python.info и включить M-x Info-mode.

1Помимо человеческих ошибок, таких как опечатка в ссылке, проблемы могут возникнуть из-за неправильного формата файлов dir.

person Lorem Ipsum    schedule 01.12.2020
comment
Спасибо @lorem ipsum! Я думаю, что этот ответ по существу такой же (хотя и с дополнительными инструкциями), что и у Алиота (теперь он связан с вопросом, потому что можно принять только 1 ответ) - дайте мне знать, если я что-то упустил? - person Matt Curtis; 25.02.2021
comment
Я бы сказал, что это точно :) - person Lorem Ipsum; 26.02.2021

Для Python 3.8.0 и более поздних версий предварительно созданные информационные файлы доступны по адресу https://www.python.org/ftp/python/doc и/или https://docs.python.org/3/archives/.

person Jonathan Moore    schedule 23.01.2021