小编Dio*_*ion的帖子

将预编译的Cython代码分发给Windows

对于一堂课,我写了一个数值问题的求解器.我的代码运行在一个IPython笔记本中,其中大部分代码都是纯Python + NumPy + matplotlib,但性能关键部分是用Cython编写的(并包含在IPython %%cython魔法中).教授喜欢我的解决方案,并要求我向一些本科学生提供,他将在另一个班级教授类似的主题作为参考资料.问题是,我不确定分发代码的最佳方式是什么.

我的主要问题是,大多数学生可能会运行Windows.在Windows上编译Cython代码是我最后一次做的噩梦,因为你必须与几个不同的C编译器混在一起,直到找到一个有效的编译器.对于想要运行我的笔记本以获得有效的Cython环境的每个学生来说,绝对不能期望它.

我有想法在Windows机器上预编译代码的Cython部分(它不需要由学生更改)并分发pyd文件.所以我的问题是:

我可以期望在Windows上编译的Cython二进制文件可以在另一台Windows机器上使用吗?

python windows cython

6
推荐指数
1
解决办法
821
查看次数

在单击中弃用参数别名的正确方法

我想弃用参数别名click(例如,从下划线切换为破折号)。有一阵子,我希望两个公式都有效,但是FutureWarning在使用待弃用的别名调用参数时抛出一个。但是,我还没有找到访问调用参数的实际别名的方法。

简而言之,我要:

click.command()
click.option('--old', '--new')
def cli(*args, **kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)

用选项调用时发出警告--old,而用调用时不发出警告--new。有没有一种干净的方式来做到这一点,而又不过度依赖未记录的行为?

我尝试将回调添加到中click.option,但在解析该选项后似乎会调用该回调,并且参数不包含实际使用哪个别名的信息。一个解决方案可能会过载click.Option,甚至可能是click.Command,但是我不知道实际的解析发生在哪里。

python python-click

5
推荐指数
1
解决办法
327
查看次数

Snakemake中输出的数量不同(已知)

我有一个Snakemake规则,可以处理数据存档,并基本上解压缩其中的数据.档案包含我在规则开始之前知道的不同数量的文件,因此我想利用它并执行类似的操作

rule unpack:
    input: '{id}.archive'
    output: 
        lambda wildcards: ARCHIVE_CONTENTS[wildcards.id]
Run Code Online (Sandbox Code Playgroud)

但是我无法使用函数output,并且有充分的理由.但是,我无法想出一个好的替代品.该规则运行起来非常昂贵,所以我不能这样做

rule unpack:
    input: '{id}.archive'
    output: '{id}/{outfile}'
Run Code Online (Sandbox Code Playgroud)

并为每个存档运行多次规则.另一种选择可能是

rule unpack:
    input: '{id}.archive'
    output: '{id}/{outfile}'
    run:
        if os.path.isfile(output[0]):
            return
        ...
Run Code Online (Sandbox Code Playgroud)

但我担心会引入竞争条件.

是否dynamic真的唯一选择标记规则输出?我可以自动为每个存档生成一个单独的规则,但我还没有找到办法.

snakemake

3
推荐指数
1
解决办法
247
查看次数

标签 统计

python ×2

cython ×1

python-click ×1

snakemake ×1

windows ×1