鸡计划相当于Python的virtualenv?

时间:2017-10-06 19:34:16

标签: chicken-scheme

有没有办法创建相当于Python的虚拟环境(virtualenv)?使用virtualenvs,可以在虚拟环境(单独的目录)中安装Python包,而不会弄乱全局python环境。可以删除一个人决定他们不需要的软件包,而不必担心删除另一个Python项目所依赖的软件包。我确信目前我还没有想到其他好处。我注意到当我使用鸡肉安装时,它会在我的/usr/local/Cellar/chicken/4.12.0/lib/chicken/8/目录中安装所有鸡蛋。有没有办法让他们在项目特定的目录中安装那个鸡蛋,就像Python的virtualenv工作方式一样?

4 个答案:

答案 0 :(得分:2)

CHICKEN 4中确实没有这样的东西。这里的问题是将鸡蛋安装到不同的位置是一个部分,另一个是运行程序,以便它们在该位置查找鸡蛋。您可以通过使用以下内容来模拟它:

export LOCAL_EGGS=/path/to/project/local
chicken-install -init $LOCAL_EGGS
export CHICKEN_REPOSITORY=$LOCAL_EGGS
chicken-install r7rs ...
csc ...

答案 1 :(得分:2)

最简单的方法是在构建时使用PREFIX make选项将CHICKEN安装到其他位置(有关说明,请参阅README)。这使您可以为每个项目专门构建一个CHICKEN。我非常喜欢这个选项而不是其他选项,因为它很容易理解,而且CHICKEN本身构建速度非常快而且不是很大,所以我觉得这样做的开销是可以接受的。

或者,使用wasamasa proposed,或使用-deploy选项在程序中安装鸡蛋。有关详细信息,请参阅手册中的deployment chapter

答案 2 :(得分:1)

实际上,您不需要任何“虚拟环境”-一切都已经就绪。

有一种简单的方法来change repository location

CHICKEN_INSTALL_REPOSITORY是要安装鸡蛋的地方,并且是chicken-installchicken-uninstallchicken-status等与鸡蛋相关的工具的参考和更新位置。确保在这些环境变量中给定的路径是绝对路径,而不是相对路径。

CHICKEN_REPOSITORY_PATH是一个目录(或由: / ;分隔的目录的列表),所有基于鸡肉的程序都将在其中装载鸡蛋。

CHICKEN_INSTALL_REPOSITORY指向您想要的位置。请注意,您需要将CHICKEN_REPOSITORY_PATH指向本地存储库和系统存储库,以便能够导入Chicken系统分发的扩展。

您还很可能需要setup installation prefix

如果指定,将在扩展安装路径之前添加替代安装前缀。它由-prefix选项或环境变量CHICKEN_INSTALL_PREFIX设置。

并更新您的PATH

PATH="$CHICKEN_INSTALL_PREFIX/bin:$PATH"

这允许您安装提供控制台程序的扩展。

剩下要做的就是export所有这些变量。

就是这样!

这基本上就是Python的virtualenv activate脚本所做的事情。如您所见,这是非常简单的步骤。您不需要专用的工具来管理它。一个非常简单的shell脚本可以很好地发挥作用。

它如何工作?

这可以通过引入一个更高的深度级别局部层次结构来实现(如/usr/usr/local一样,请参见FHS)。如果您不知道本地层次结构到底是什么,请看看您的$HOME/.local-里面可能有一些有趣的东西。

奖金

就每个项目扩展存储库的设置仅涉及环境修改而言,这绝对可以自动化。通常,有一种非常方便的工具可以解决此类问题:direnv。在您的$HOME/.envrc中使用此简单功能:

use_chicken() {
    LOCAL=$(expand_path .local)

    system_repository=$(chicken-install -repository)
    binary_version=${system_repository##*/}

    local_repository=${LOCAL}/lib/chicken/${binary_version}

    path_add CHICKEN_REPOSITORY_PATH ${system_repository}
    path_add CHICKEN_REPOSITORY_PATH ${local_repository}

    export CHICKEN_REPOSITORY_PATH
    export CHICKEN_INSTALL_REPOSITORY=${local_repository}
    export CHICKEN_INSTALL_PREFIX=${LOCAL}

    PATH_add ${LOCAL}/bin
}

您只需在项目目录内.envrc中的这两行即可设置Chicken项目:

source_up
use chicken

答案 3 :(得分:1)

我知道https://github.com/ursetto/cenv存在(我自己从未使用过),尽管它仅适用于CHICKEN 5(不适用于CHICKEN 4)。考虑过要提及它,以防您打算迁移到CHICKEN 5。