- 为 holo-layer 添加 Python 环境
虽然 holo-layer 的 README 上说使用 pip 安装 Python 依赖库,但是我们用 的是声明式的 NixOS,像 pip 这种东西那是看不上一点,我们要用 Nix 来解决 依赖。
我们可以通过给系统加一个 Python,并对这个它使用 withPackages 增加必须 的 Python 库来解决问题。我们先尝试这个方法。
在 holo-layer 的 README 中找到其所需的 Python 依赖,是这样的:
pip3 install epc sexpdata six inflect PyQt6 PyQt6-Qt6 PyQt6-sip
接下来就是上 NixOS 官网查有没有这些库的包了,查到的包名称的格式是类似 这样的:python313Packages.pyqt6,这里“313”指 Python 的 3.13 版本。最终 我们找到了除 PyQt6-Qt6 之外的其他包,我们怀疑 PyQt6-Qt6 可能被包括在 pyqt6这个包中了,所以先不管它。
然后就是往系统中添加 Python 了,我们可以直接选择非常新的 Python 3.13
版本,将如下代码加入environment.systemPackages
中:
(pkgs.python313.withPackages
ps: with ps; [
epc
inflect
pyqt6
pyqt6-sip
sexpdata
six
]
)
这里用到了 Nix 的with
语句。with
语句在放在列表前,作用是给列表的每
一项加上前缀,例如with pkgs; [ emacs firefox ]
,就是把 pkgs 作为前缀
加到 emacs 和 firefox 上,结果等于[ pkgs.emacs pkgs.firefox ]
。
完成所有操作之后,我们打开 Emacs,加载 holo-layer,结果发现还有报错, 缺少一个叫 Xlib 的 Python 库,好在官网能查到它的包,直接加进去,变成这 样:
(pkgs.python313.withPackages
ps: with ps; [
epc
inflect
pyqt6
pyqt6-sip
sexpdata
six
xlib
]
)
再次尝试,发现终于成功了,可以使用果冻光标了(喜)。
但这种方法并不优雅,我们的包应该是 standalone 的,不应该依赖系统安装的 Python 环境,下一节我们将解决这个问题。