求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
日渐火热的OS X包管理器Nix
 
作者:ariya.ofilabs.com   来源:CSDN   发布于 2016-6-2
 
OS X高级用户对Homebrew和MacPorts都非常熟悉,通过它们可以轻松地安装和管理软件包。然而,除此之外还有其它选择。最近,Nix的热度逐渐升高,在OS X上的表现尤其抢眼。
使用Nix进行包管理简单直观,完全可以取代Homebrew和MacPorts。可以参照下面的介绍开始上手。首先,安装Nix:
curl https://nixos.org/nix/install | sh

Nix只需要对/nix目录的访问权限,不会影响其它根目录(Nux不会对/usr和/usr/local目录造成影响)。因此,删除Nix只会移除/nix目录。
安装成功后,接下来会通过nix-env命令行进行交互。下面是一个安装示例:
$ nix-env -i hello
installing ‘hello-2.10’
these paths will be fetched (0.02 MiB download, 0.07 MiB unpacked):
  /nix/store/b6bxihaz9s5c79dsgbbxvjg8w44a036i-hello-2.10
fetching path ‘/nix/store/b6bxihaz9s5c79dsgbbxvjg8w44a036i-hello-2.10’...
$ hello --version
hello (GNU Hello) 2.10

从上面可以看到,软件包的安装位置是/nix/store下的子目录。目录名是加密哈希值,计算哈希的基础包含了构建软件需求的所有内容及依赖项。这种设计提供了很多强大的功能,处理不同版本变得更加容易,支持原子安装(automatic installation)等等。
Nix还为每个用户创建了一个profile文件,在搜索可执行程序时需要用到(在对Nix熟悉程度加深后,Nix profile的重要性会体现得更加明显)。
$ which hello
/Users/ariya/.nix-profile/bin/hello

移除软件与安装一样简单:
$ nix-env -e hello
uninstalling ‘hello-2.10’

很多情况下,Nix会以二进制格式安装软件(由基于Hydra的构建工厂完成构建与缓存)。


想知道Nix可以安装哪些软件?恩,Nix提供的软件(在OS X上大概有7000个)没有Homebrew和MacPorts那么丰富。但是,你可以找到许多像Git、Vim(及插件)这样的常用软件。通过命令查看所有可用软件:
$ nix-env -qa

与其它包管理器一样,Nix也提供了好用的升级功能。举例说明,OS X El Capitan默认安装了Git 2.6,但是你可能希望使用最新的Git 2.8。做到这一点并不困难,像下面这样执行:
$ git --version
git version 2.6.4 (Apple Git-63)
$ nix-env -i git
warning: there are multiple derivations named ‘git-2.8.0’; using the first one
installing ‘git-2.8.0’
$ which git
/Users/ariya/.nix-profile/bin/git
$ git --version
git version 2.8.0

过些时候,你突然不喜欢最新版本了,想要切换到之前系统自带的默认版本。回滚操作不会留下任何垃圾文件,能够完全回到安装Git 2.8前的系统状态:
$ nix-env -e git
uninstalling ‘git-2.8.0’
$ which git
/usr/bin/git
$ git --version
git version 2.6.4 (Apple Git-63)

Nix提供的包管理功能不止于此。接下来的文章中,我们会介绍Nix如何应对多种环境(例如,Python 2.7 vs Python 3.5),敬请期待。

 

 
分享到
 
 
 
 



利用Gitlab和Jenkins做CI
CPU深度学习推理部署优化
九种跨域方式实现原理
 
 讲座 设计模式C语言
 讲师:薛卫国
 时间:2019-4-20
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
希望我们的资料可以帮助你学习,也欢迎投稿&提建议给我
频道编辑:winner
邮       件:winner@uml.net.cn

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号