寶石、Egg 和 Perl 模組

在新的 macOS 安裝中,有兩個供所有使用者使用的外掛程式空目錄

您需要 sudo 才能安裝到這些目錄,例如:sudo gem installsudo cpan -i

使用系統 Python 的 Python 套件 (Egg) 無需 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 時才建議這樣做。

Brewed Ruby 安裝可執行檔至 $(brew --prefix ruby)/bin,無須 sudo。您應該將此加入您的路徑。請參閱 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