正如手册页所nix-shell
描述的那样:
Nix 可用于通过 nix-shell 命令提供某种虚拟环境。
就像 Python 开发人员通常创建一个 Python 包的虚拟环境一样,然后将其激活,nix-shell
可用于创建 Nix 包管理器中可用的任何包的虚拟环境;一种工具,允许用户下载并激活虚拟 shell 环境,其中包含开发某些软件所需的软件包,而不会污染用户或系统环境。
背景介绍完了,我的问题是:是否有nix-shell
可用于 Guix 包管理器的等效工具?
答案1
有guix shell
现在。
$ guix shell hello
为您带来新鲜的环境,hello
其中安装了软件包。它是 的“直接”替代品guix environment --ad-hoc
。
如果你更想要依赖关系的hello
(例如,开始开发它)那么您所需要的就是这么简单:
$ guix shell -D hello
答案2
我想你正在寻找guix environment --ad-hoc
。例如:
guix environment --ad-hoc python python-pandas
这将创建一个临时的 Guix 配置文件,其中安装了 Python 和 Pandas,但也可以安装 Guix 中的任何其他软件包。具体来说,对于 Python,您需要包含它,python
以便它知道python-pandas
。以上为您提供了一个临时配置文件,它仍然可以访问当前用户和系统配置文件中的现有环境变量和软件包。
对于更加隔离(因此可重现)的环境,您可以使用--pure
隐藏现有的环境变量、用户配置文件和系统配置文件:
guix environment --pure --ad-hoc [packages]
对于完全容器化隔离,允许您限制文件系统和网络访问:
guix environment --container --ad-hoc [packages]
最后两个选项将要求您显式指定大量更基本的包,例如coreutils
;更多努力,但更具可重复性。
看调用guix环境了解更多。
我还使用一个名为 的程序,direnv
它可以自动激活/停用各种项目的这些配置文件和其他环境变量。您.envrc
为您的项目创建一个文件,如下所示:
use guix --ad-hoc python python-matplotlib python-html5lib python-mypy python-flake8
source ~/.virtualenvs/base-django-py38/bin/activate
export DJANGO_SETTINGS_MODULE=project.settings.dev
这use guix
是 direnv 的自定义功能,仅简要记录。