【问题标题】:Can Pweave play nice with Ruffus?Pweave 可以和 Ruffus 一起玩吗?
【发布时间】:2012-02-06 05:10:26
【问题描述】:

我对开发自我记录的管道很感兴趣。

我可以将Ruffus 任务包装在Pweave 块中吗?

Pweave and Ruffus
==============================================================

**Let's see if Pweave and ruffus can play nice**


<<load_imports>>=
import time
from ruffus import *
@

**Do this**
<<task1>>=
task1_param = [
                    [ None, 'job1.stage1'], # 1st job
                    [ None, 'job2.stage1'], # 2nd job
              ]
@files(task1_param)
def first_task(no_input_file, output_file):
    open(output_file, "w")
@

我感觉 Ruffus 装饰器正在抛弃 Pweave:

$ Pweave ruffus.Pnw
Processing chunk 1 named load_imports
Processing chunk 2 named task1
<type 'exceptions.TypeError'>
("unsupported operand type(s) for +: 'NoneType' and 'str'",)

也许有解决方法?

【问题讨论】:

  • 嗨 Jeremy,作为 Pweave 的作者,我很高兴看到 Leo 能够解决这个问题。我希望你不介意我在你的问题中添加了 pweave 标签。

标签: python pipeline literate-programming pweave ruffus


【解决方案1】:

我是 Ruffus 的作者,我刚刚签入了对 ruffus 的更改,以允许它与 pweave 合作到谷歌源代码存储库中。我将在下一个版本中。

如果您不耐烦,可以使用以下命令行获取最新(固定)的源代码:

hg clone https://bunbun68@code.google.com/p/ruffus/ 

狮子座

详情如下:

Ruffus 使用每个 ruffus 任务函数的全限定名(带有模块名称)来唯一标识代码,以便可以通过名称引用管道任务。

Pweave 代码非常简单。好的! Pweave 一次将代码块发送到 python 解释器,以逐块为exec-ed。当然,块不属于任何“模块”,并且任务函数的 function.__module__ 值为 None 而不是任何字符串。

一个明智的str()None 转换为"None" 似乎已经解决了这个问题。

狮子座

【讨论】:

    【解决方案2】:

    为了记录,pweave 与装饰器配合得很好。

    这与 ruffus 如何识别哪个函数是哪个函数有关——函数实际上必须属于一个模块文件,因为使用了function.__module__ 属性。我不确定您是否可以欺骗它来包含创建这些函数标识符所需的所有信息。

    如果您编辑 pweave 中包含的 pweb.py 脚本以使 try:...except: 函数中的 pweave() 语句更冗长,您可以自己查看错误(最简单的方法是注释掉 try 和 @ 987654326@ 部分)。你得到的错误在最深的地方。

    出于教学目的,我建议远离像 ruffus 这样的复杂库,因为 ruffus 特别使用了许多技巧(如果您愿意的话,可以使用语法糖)来提供简单的用户界面。如果您不打算为此目的使用它,您可以尝试联系对我的功能请求非常敏感的作者。他可能对如何做到这一点有一些想法。

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 2015-07-03
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多