【问题标题】:What's the best way to do literate programming in Python on Windows? [closed]在 Windows 上用 Python 进行文学编程的最佳方法是什么? [关闭]
【发布时间】:2009-08-12 16:32:54
【问题描述】:

我一直在尝试使用 Python 进行文学编程的各种方法。我喜欢noweb,但我有两个主要问题:首先,很难在 Windows 上构建,我花了大约一半的开发时间;其次,它要求我缩进每一块代码,就像它在最终程序中一样——我不一定知道我什么时候写的。我不想用 Leo,因为我对 Emacs 很执着。

有没有好的识字编程工具:

  1. 在 Windows 上运行
  2. 允许我在使用时设置块的缩进,而不是在写入时设置
  3. 仍然让我在 Emacs 中工作

谢谢!


更正:noweb 允许我稍后缩进 --- 我误读了我在上面找到的论文。

默认情况下,notangle 在扩展块时保留空格并保持缩进。因此,它可以与 Miranda 和 Haskell 等语言一起使用,其中缩进很重要

这让我只有“在 Windows 上运行”的问题。

【问题讨论】:

  • 我认为第二点永远不容易解决:缩进是 Python 语言的关键,所以我猜你永远解决不了那个问题。
  • @jkp:实际上,在发出不同于文学编程文档的最终源代码时,解决缩进问题相对容易。只要你的 LP 语言就可以使用哪种 Python 语句套件强加一些合理的规则。
  • 显然有人实现了 python 等效项:noweb.py
  • 为什么这个问题被关闭了?在我看来,任何获得这么多赞成票的问题,40 票的答案都是在回答需要。重温规则?
  • @Sherwood Botsford 你一定是新来的。

标签: python windows literate-programming noweb


【解决方案1】:

我写了 Pweave http://mpastell.com/pweave,它的目的是生成动态报告并使用 noweb 语法。它是一个纯 Python 脚本,因此它也可以在 Windows 上运行。它不能解决你的缩进问题,但也许你可以为此修改它,代码真的很简单。

【讨论】:

    【解决方案2】:

    社区中事实上的标准是 IPython 笔记本。

    Peter Norvig 演示解决旅行商问题的算法的优秀示例:https://nbviewer.org/url/norvig.com/ipython/TSP.ipynb

    更多示例列于https://github.com/jupyter/jupyter/wiki

    【讨论】:

    • Ipython/Jupyter Notebooks 非常适合探索,但它们确实无法与 rmarkdown/Sweave 相比——它们在 git 中使用起来很痛苦,因为它们在 XML 中存储了大量元数据和输出不需要保留历史记录的文件(实际上,您只需要生成器,而不是输出)。 Pweave 是文学编程的更好解决方案。
    • @Colonel-panic 和所有感谢您指出这一点......几个问题......
    • 有没有办法将 python 代码提取到 Jupyter 笔记本中的单独 python 文件中?
    • 我可以在命令行运行一个 jupyter notebook,这样它将执行整个代码并将生成的图像/其他输出捕获到 jupyter notebook 中吗?
    • Jupyter 有 Jupytext
    【解决方案3】:

    我这样做了:

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

    您可以获得任意数量的网络/编织产品,这些产品将帮助您一举构建文档和代码。

    您可以 - 非常轻松地 - 编写自己的代码。从 RST 源代码中提取 Python 代码块并进行组装并不是什么火箭科学。实际上,我建议您编写自己的 Docutils 指令来从 RST 源文档中组装 Python 代码。

    您通过 docutils rst2html(或 Sphinx)运行 RST 以生成最终的 HTML 报告。

    您在同一个 RST 源上运行自己的实用程序来提取 Python 代码块并生成最终模块。

    【讨论】:

    • 我正在查看您的方法 --- 它看起来非常接近我想要的。我宁愿自己适应别人的工具,也不愿自己写一个;看看网络框架发生了什么!
    • 这一切看起来都不错,除了当我生成 LaTeX 时,有一堆 MiKTeX 和 TeTeX 似乎无法理解的 nuweb 标记;我找不到补救的方法。你能解释一下它是如何工作的吗?我阅读了您出色的文档,但我不确定您所说的“LATEX 支持的最大差距是完全缺乏对 nuweb 中原始标记的理解,以及在创建 pyWeb。”
    • @JsonFruit:在不了解任何 LaTeX 的情况下,我转换了 nuweb 的某些部分。由于我没有花时间了解任何 LaTeX,我怀疑这是错误的。你已经发现了我转换错误的事实。由于 LaTeX 标记相对容易隔离,您可能需要考虑修复标记。或者直接使用 nuweb(或 noweb)——它们可能会更好。
    • 我会稍微玩一下 LaTeX - 解析代码简单易读。如果我想出一个令人满意的解决方案,我会给你一些补丁。
    【解决方案4】:

    你可以使用 org-mode 和 babel-tangle。

    效果很好,因为您可以将 :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-ref。然后它甚至可以自动将多个源块连接到一个 noweb 引用中。

    :results output添加到第二个块的#+begin_src行,当您在块中点击C-c C-c时,可以看到该块下的打印结果。

    【讨论】:

      【解决方案5】:

      您可能会发现在 Windows 上构建 noweb 3 更容易。它被设计为比标准 noweb 更便携。

      【讨论】:

      • 网站再次响应后,我会检查一下。
      • 我看了一下——它似乎比以前的版本更适合我。如果我在选择另一个工具之前意识到它是可用的,我很可能会选择它。
      【解决方案6】:

      另请参阅我的最后一个 LP 工具:http://code.google.com/p/nano-lp。它不需要特殊的输入格式,支持 Markdown/MultiMarkdown、reStructuredText、OpenOffice/LibreOffice、Creole、TeX/LaTeX 并具有超轻量级和简洁的语法 - 不再有神秘的识字程序。

      【讨论】:

      • 请编辑您的答案以获得当前链接。目前(2021 年 1 月 6 日)有一个简短的描述,没有来源。
      【解决方案7】:

      发现这个工具很有用:https://github.com/bslatkin/pyliterate

      【讨论】:

      • 在这种情况下,这不是你的错,因为问题是题外话,但请注意,一般来说,推荐某些工具或库的答案必须在答案中展示它如何解决手头的问题本身。
      猜你喜欢
      • 2010-10-22
      • 2010-09-28
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2013-06-25
      • 2020-10-10
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多