Ruby相当于virtualenv?

有没有类似的Python实用程序virtualenv ?

基本上它允许你将Python包安装到一个沙盒环境中,所以easy_install django不会进入你的系统范围的站点包目录,它会进入virtualenv创build的目录。

例如:

 $ virtualenv test New python executable in test/bin/python Installing setuptools...cd .........done. $ cd test/ $ source bin/activate (test)$ easy_install tvnamer Searching for tvnamer Best match: tvnamer 0.5.1 Processing tvnamer-0.5.1-py2.5.egg Adding tvnamer 0.5.1 to easy-install.pth file Installing tvnamer script to /Users/dbr/test/bin Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.egg Processing dependencies for tvnamer Finished processing dependencies for tvnamer (test)$ which tvnamer /Users/dbr/test/bin/tvnamer 

RubyGems有这样的东西吗?

RVM更接近virtualenv的工作原理,因为它可以让你的沙箱不同的ruby版本和他们的gem,等等。

无论是沙箱,RVM还是rbenv都不pipe理应用程序的gem依赖项的版本。 这个工具是捆绑软件 。

  • 使用Gemfile作为应用程序的依赖声明
  • 使用bundle install将这些依赖项的显式版本安装到一个孤立的位置
  • 使用bundle exec来运行你的应用程序

我想你会喜欢沙箱 。

似乎没有人提到rbenv 。

如果您只需要将gem安装为非root用户,请尝试设置GEM_HOME环境variables。 然后运行gem

例如:

 $ export GEM_HOME=$HOME/local/gems $ gem install rhc 

我会提到我使用Bundler(我使用RVM-RVM来pipe理ruby和一组默认的全局gem,Bundler来处理项目特定的gem)

 bundler install --binstubs --path vendor 

在项目的根目录下运行这个命令会安装从Gemfile中列出的gems,将lib放在./vendor ,而./bin所有可执行文件都require s(如果你使用bundle console或者Bundler需要)这些exes和libs。

为我工作。

我build议direnv 。 它是一个shell的环境切换器。

在每次提示之前,它检查当前目录和父目录中是否存在“.envrc”文件。 如果文件存在(和授权),它被加载到bash子shell中,然后所有导出的variables被direnv捕获,然后使得当前shell可用。

这里是如何使用 ruby-install的direnv

+ ruby​​-install

将此添加到~/.direnvrc

 use_ruby() { local ruby_root=$HOME/.rubies/$1 load_prefix "$ruby_root" layout_ruby } 

安装ruby-install( brew install ruby-install )并安装一堆ruby。

 ruby-install ruby 1.9.3 ruby-install ruby 2.0.0 ruby-install ruby 2.2.0 

然后为了方便而创build一对符号链接:

 ln -s .rubies/1.9 ruby-1.9.3-p* ln -s .rubies/2.0 ruby-2.0.0 ln -s .rubies/2.2 ruby-2.2.0 

最后在任何项目的.envrc

use ruby 2.0

这将把所有的gem放在项目的.direnv/ruby目录下(使开启的gem更容易)。 bundler会把包装器的二进制文件.direnv/bin (不需要更多的bundle exec !)。

+ rbenv

通过在任何.envrc文件中添加use rbenv命令,也可以使用rbenv。 这将激活rbenv,反过来将ruby包装在PATH。

请注意,不需要在.bashrc或.zshrc中安装rbenv以使其工作。

+ RVM

下面是我在ruby项目中使用的最复杂的.envrc:

 rvm use 1.8.7 layout ruby PATH_add .direnv/bundler-bin 

rvm用来为你select正确的ruby版本

布局命令自动设置一些常用的环境variables。 现在只有ruby的布局存在。 它所做的是设置GEM_HOME环境variables,它的bin目录到你的path。 因为它取决于ruby版本,所以一定要在“rvm”之后调用它。 由于每个ruby布局目录都有自己的GEM_HOME,所以不需要使用rvm的gemset。

PATH_add提前并扩展给定的相对path。 在这种情况下,我使用它来从我自己的bin脚本中分离bundler binstub,并使用bundle install --binstubs .direnv/bundler-bin

如果你想知道这些命令到底是做什么的,那么现在:cat direnv stdlib | 减