scheme - 如何在 Guile Scheme 中打开相对于源文件目录的文件?
问题描述
我正在为我正在处理的 Python 项目编写 Guix 开发人员环境定义,它看起来像这样:
(use-modules (gnu packages)
(gnu packages python)
(gnu packages python-crypto)
(gnu packages python-web)
(gnu packages python-xyz)
(ice-9 rdelim)
((guix licenses) #:prefix license:)
(guix build-system python)
(guix download)
(guix packages))
(define (requirements-file->guix-packages filename)
(let* ((requirements-text (with-input-from-file filename read-string))
(requirements-list (string-split requirements-text #\newline)))
(map (lambda (requirement)
(specification->package (string-append "python-" requirement)))
requirements-list)))
(define internsidor-deps (requirements-file->guix-packages "requirements.in"))
(define development-tools (list python-pip python-wrapper python-virtualenv python-jedi))
(append internsidor-deps development-tools)
requirements.in
现在,如果在and所在的项目文件夹的根目录下进行评估,则这段代码可以正常工作requirements-prod.in
。但是如果用户移动到一个子文件夹并运行如下代码
guix environment --ad-hoc --load='../development-environment.scm'
他们会发现自己出现以下错误
guix environment: error: while evaluating '../development-environment.scm', it failed opening 'requirements.in' with the error: No such file or directory
(或者这些方面的错误,我已经修改了我的 Guix 来为这个失败提供更好的错误消息。)
所以我的问题是:如何修改调用以with-input-from-file
使路径相对于 Scheme 文件而不是相$PWD
对于 shell 的路径?
解决方案
可以(dirname (current-filename))
用来获取当前文件的目录。另请参阅https://www.gnu.org/software/guile/manual/guile.html#Source-Properties
推荐阅读
- c# - 如何从 Xamarin 表单中的 ListView 集合中获取总价格
- microservices - 微服务架构中的Server-2-server授权
- reactjs - npm install 无法在 ubuntu 上运行 ERR EMISSINGARG
- python - 在 Python 中使用“exchangelib”在特定日期范围(用户输入)内从 Outlook 中的特定文件夹访问电子邮件
- kubernetes - Kubernetes 中 Prometheus 的动态目标?
- c# - 设置组合框自动完成的宽度
- html - div的动画背景颜色不起作用
- python - 为什么外键显示为下拉框?
- python - 为我的 kmeans 聚类数据创建散点图时遇到问题
- windows - 向 IE 代理设置添加例外以允许连接到 Exchange Online