宝石、Eggs 和 Perl 模块

在新的 macOS 安装中,有两个空目录可供所有用户添加附件

你需要 sudo 才能安装到这些目录,如下所示:sudo gem installsudo cpan -i

使用系统 Python 安装 Python 包(eggs),无需 sudo

避免使用 sudo 的一种选择是使用访问控制列表。例如

chmod +a 'user:<YOUR_NAME_HERE> allow add_subdirectory,add_file,delete_child,directory_inherit' /Library/Python/3.y/site-packages

将允许你以自己的身份向 Python 3.y 添加包,这可能比更改目录的组所有权更安全。

那么我为什么要使用 sudo 呢?

习惯吧?

一个原因是可执行文件进入 /usr/local/bin。通常这不是一个可写位置。但是,如果你按照我们的建议在 macOS Intel 上安装 Homebrew,/usr/local 将可以在不使用 sudo 的情况下写入。因此,你现在可以安装所需的开发工具,而不用冒使用 sudo 的风险。

备用包路径

仅在你使用酿造的 Python 时才建议这样做。

在 macOS 上,任何 Python 版本 X.Y 也会在 ~/Library/Python/X.Y/lib/python/site-packages 中搜索模块。该路径可能还不存在,但你可以创建它

mkdir -p ~/Library/Python/2.7/lib/python/site-packages

要教 easy_installpip 在那里安装,可以使用 --user 开关或创建一个 ~/.pydistutils.cfg 文件,其中包含以下内容

[install]
install_lib = ~/Library/Python/$py_version_short/lib/python/site-packages

使用 virtualenv(与系统 Python 一起使用)

Virtualenv 提供 pip,并创建具有单独 site-packages 的隔离 Python 环境,因此不需要 sudo。

无需 sudo 的 Rubygems

仅在你使用 rbenv 或 RVM 时才建议这样做。

酿造的 Ruby 在不使用 sudo 的情况下将可执行文件安装到 $(brew --prefix ruby)/bin。你应该将此添加到你的路径中。有关最新信息,请参阅 ruby 配方中的注意事项。

与系统 Ruby 一起使用

为了让 Ruby 安装到 /usr/local,我们需要将 gem: -n/usr/local/bin 添加到你的 ~/.gemrc 中。它是 YAML,所以手动执行或使用此

echo "gem: -n/usr/local/bin" >> ~/.gemrc

但是,1.3.6 之前的 RubyGems 所有版本都有缺陷,并会忽略上述设置。遗憾的是,新安装的 Snow Leopard 附带 1.3.5。目前已知的解决此问题的方法是作为 root 升级 rubygems

sudo gem update --system

备用 gem 路径

只需将所有内容安装到 Homebrew 前缀中,如下所示

echo "export GEM_HOME=\"$(brew --prefix)\"" >> ~/.bashrc

它不起作用!当我尝试安装东西时,会收到一些“权限”错误

请注意,你可能不想这样做,因为 Apple 认为这不是一个好的默认设置。

如果你曾经做过 sudo gem 等操作,那么很多文件将被创建并归 root 所有。使用以下命令修复

sudo chown -R $(whoami) /Library/Ruby/* /Library/Perl/* /Library/Python/*

不使用 sudo 的 Perl CPAN 模块

Perl 模块 local::lib 的工作方式类似于 rbenv/RVM(尽管仅适用于模块,不适用于 Perl 安装)。一个简单的解决方案是仅稍微污染你的 /Library/Perl,即使用 sudo 安装 local::lib

sudo cpan local::lib

请注意,这将安装一些其他依赖项,如 Module::Install。然后在你的 shell 的启动中放置适当的咒语,例如对于 .profile,你会插入以下内容;对于其他内容,请参阅 local::lib 文档。

eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

现在(在你重新启动 shell 之后),cpanperl -MCPAN -eshell 等将安装 ~/perl5 中的模块和二进制文件,并且相关子目录将位于你的 PATHPERL5LIB 中。

完全避免为 Perl 使用 sudo

如果你甚至不想(或不能)使用 sudo 来引导 local::lib,只需手动在 ~/perl5 中安装 local::lib,并在 .bashrc eval 咒语之前将相关路径添加到 PERL5LIB

另一个选择是使用 perlbrew 在你的主目录或任何你想要的位置安装 Perl 的单独副本

curl -L https://install.perlbrew.pl | bash
perlbrew install perl-5.16.2
echo ".~/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
Fork me on GitHub