2009-08-12 3 views
34

Я играл с различными способами грамотного программирования на Python. Мне нравится noweb, но у меня есть две основные проблемы: во-первых, сложно строить на Windows, где я трачу примерно половину своего времени разработки; и во-вторых, это требует от меня отступать каждый кусок кода, поскольку он будет в финальной программе, который я не обязательно знаю, когда я его пишу. Я не хочу использовать Лео, потому что я очень привязан к Emacs.Каков наилучший способ сделать грамотное программирование на Python в Windows?

Есть хороший инструмент грамотного программирования, что:

  1. Работает на Windows,
  2. Позволяет мне установить отступ на куски, когда они используются, не тогда, когда они написаны
  3. Еще позволяет мне работать в Emacs

Спасибо!


Исправление: nowebделает позвольте мне отступ позже --- я неправильно интерпретировал бумагу я нашел на нем.

По умолчанию notangle сохраняет пустое пространство и поддерживает отступы при расширении ломтей. Поэтому он может быть использован с языками, как Miranda и Haskell, в которых отступы значителен

Это оставляет меня только «Запускается на Windows» проблемы.

+0

Я думаю, точка два никогда будет легко решить: отступы являются ключом к языку Python, поэтому я предполагаю, что вы никогда не решите эту проблему. – jkp

+0

@jkp: На самом деле, относительно легко разрешить отказ при испускании конечного источника, отличного от грамотного документа программирования. Пока ваш язык LP накладывает некоторые рациональные правила в отношении того, с какими наборами функций Python он будет работать. –

+0

Очевидно, кто-то внедрил эквивалент 'python': [' noweb.py'] (https://github.com/JonathanAquino/noweb.py). –

ответ

7

Я сделал это:

http://sourceforge.net/projects/pywebtool/

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

Вы можете - довольно легко - написать свой собственный. Это не ракетостроение, чтобы вырвать блоки кода Python из источника RST и собрать его. В самом деле, я предлагаю вам написать свои собственные директивы Docutils для сборки кода Python из исходного документа RST.

Вы запускаете RST через docutils rst2html (или Sphinx), чтобы получить окончательный отчет HTML.

Вы запускаете свою собственную утилиту в том же источнике RST, чтобы извлекать блоки кода Python и создавать финальные модули.

+1

Я просматриваю ваш подход - он выглядит довольно близко к тому, что я хотел бы иметь. Я бы скорее приспособился к чужому инструменту, чем написал свой собственный; посмотрите, что случилось с веб-каркасами! – JasonFruit

+0

Все об этом выглядит хорошо, за исключением того, что когда я создаю LaTeX, есть куча nuweb-разметки, которую MiKTeX и TeTeX, похоже, не понимают; Я не могу найти способ исправить это. Можете ли вы объяснить, как это работает? Я прочитал ваши превосходные документы, но я не уверен, что вы имеете в виду, когда говорите: «Самый большой разрыв в поддержке LATEX - это полное отсутствие понимания первоначальной разметки в nuweb и очень реальный ущерб, нанесенный этой разметке, когда создавая pyWeb. " – JasonFruit

+0

@ JsonFruit: Без понимания каких-либо LaTeX я преобразовал некоторые части nuweb. Поскольку я не нашел времени, чтобы понять любой из LaTeX, я подозревал, что это было неправильно. Вы обнаружили, что я неправильно это сделал. Поскольку разметку LaTeX относительно легко изолировать, вы можете рассмотреть возможность фиксации Markup. Или используйте nuweb (или noweb) напрямую - они могут быть лучше. –

3

Возможно, вы можете найти noweb 3 проще в использовании на Windows. Он был разработан, чтобы быть более портативным, чем стандартный noweb.

+0

Я проверю его, как только сайт снова ответит. – JasonFruit

+0

Я посмотрел на него - кажется, гораздо более вероятно, чтобы работать для меня, чем предыдущая версия. Я, скорее всего, пошел бы с этим, если бы понял, что он доступен, прежде чем я остановился на другом инструменте. – JasonFruit

10

Я написал Pweave http://mpastell.com/pweave, который предназначен для создания динамических отчетов и использует синтаксис noweb. Это чистый скрипт python, поэтому он также работает в Windows. Он не исправляет проблему с отступом, но, возможно, вы можете изменить его для этого, код действительно очень прост.

7

Вы можете использовать org-mode и babel-клубок.

Это хорошо работает, так как вы можете дать: noweb-ref исходным блокам.

Вот минимальный пример: Activate org-babel-tangle, затем поместить это в файл noweb-test.org:

#+begin_src python :exports none :noweb-ref c 
abc = "abc" 
#+end_src 

#+begin_src python :noweb yes :tangle noweb-test.py 
def x(): 
    <<c>> 
    return abc 

print(x()) 
#+end_src 

Вы также можете использовать свойства заголовков для придания noweb-реф. Затем он может автоматически конкатенировать несколько исходных блоков в одну ссылку noweb.

Добавить :results output в строку #+begin_src второго блока, чтобы увидеть результаты печати под этим блоком, когда вы нажмете C-c C-c в блок.

0

Смотрите также мой последний инструмент LP: http://code.google.com/p/nano-lp. Он не требует специального формата ввода, поддерживает Markdown/MultiMarkdown, reStructuredText, OpenOffice/LibreOffice, Creole, TeX/LaTeX и имеет сверхлегкий и чистый синтаксис - не более загадочных грамотных программ.

8

Стандарт де-факто в сообществе - это ноутбуки IPython.

Отличный пример, в котором Петр Норвиг демонстрирует алгоритмы для решения задачи коммивояжера: http://nbviewer.ipython.org/url/norvig.com/ipython/TSPv3.ipynb

Дополнительные примеры, приведенные на https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks

+5

Ноутбуки Ipython/Jupyter хороши для исследования, но они действительно не сравнимы с rmarkdown/Sweave - им тяжело работать с git, потому что они хранят много метаданных и выводят в XML-файл, что не обязательно для сохранения история (на самом деле, вам нужны генераторы, а не выход).Pweave - лучшее решение для грамотного программирования. – naught101

+0

@ Полковник-паника и все Спасибо за то, что вышло ... Путь вопросов ... –

+0

Есть ли способ извлечь код python в отдельный файл python в ноутбуках Jupyter? –

0

Нашли этот инструмент, чтобы быть полезным: https://github.com/bslatkin/pyliterate

+0

В этом случае это не ваша ошибка, потому что вопрос не соответствует теме, но учтите, что в целом ответ, который рекомендует какой-либо инструмент или библиотеку, должен продемонстрировать, как он решает проблему в самом ответе. –

Смежные вопросы