【发布时间】:2022-06-23 23:55:31
【问题描述】:
在一个有几个步骤的数据处理项目中,使用Snakemake,在处理一些数据的子目录中有一个Python Jupyter Notebook:
笔记本processing_step_1/process.ipynb 包含:
with open('input.csv') as infile:
for line in infile:
print(line)
数据文件processing_step_1/input.csv包含:
one,two,three
1,2,3
这是使用notebook 的Snakefile:
rule process_data:
input:
"processing_step_1/input.csv",
notebook:
"processing_step_1/process.ipynb"
如果我以交互方式运行笔记本,或者像这样从命令行运行
jupyter nbconvert --execute --to notebook processing_step_1/process.ipynb
它有效。工作目录设置为 notebook 的目录,输入文件可以通过相对路径找到。
但是,当从 Snakemake 运行时,使用
snakemake -c1
我收到一条错误消息
FileNotFoundError: [Errno 2] No such file or directory: 'input.csv'
其中的原因是notebook被复制并在不同的目录中执行,从Snakemake的错误信息可以看出:
Command 'set -euo pipefail; jupyter-nbconvert --log-level ERROR --execute --to notebook --ExecutePreprocessor.timeout=-1 /path/to/project/.snakemake/scripts/tmp9mmr8k20.process.ipynb' returned non-zero exit status 1.
在使用 Snakemake 时,从与 notebook 相同的目录加载数据文件的规范方法是什么?
我希望在没有 Snakemake 的情况下仍然能够独立使用同一个笔记本。所以最好我不想向它添加特定于 Snakemake 的代码。
似乎无法从笔记本中找到包含该笔记本的目录。参见例如https://stackoverflow.com/a/52119628/381281。我也找不到在 Snakemake 中为每个规则设置工作目录的方法。
【问题讨论】:
标签: python jupyter-notebook relative-path snakemake