是否有类似于Python实用程序virtualenv的内容?
基本上它允许您将Python软件包安装到沙盒环境中,因此easy_install django
不会进入系统范围的site-packages目录,它将进入virtualenv创建的目录。
例如:
$ 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有这样的东西吗?
答案 0 :(得分:75)
RVM更接近virtualenv的工作原理,因为它可以让你对不同的红宝石版本和它们的宝石进行沙盒等。
答案 1 :(得分:62)
沙盒,RVM和rbenv都不管理应用程序的gem依赖项的版本。该工具是bundler。
bundle install
将这些依赖项的显式版本安装到隔离的位置bundle exec
来运行您的应用答案 2 :(得分:17)
似乎没有人提到rbenv。
答案 3 :(得分:16)
我想你会喜欢sandbox。
答案 4 :(得分:13)
如果您只需要将gem作为非root用户安装,请尝试设置GEM_HOME
环境变量。然后运行gem
。
例如:
$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
答案 5 :(得分:11)
我将提到我使用Bundler进行此操作的方式(我使用RVM - RVM来管理rubies和一组默认的全局宝石,Bundler来处理项目特定的宝石)
bundler install --binstubs --path vendor
在项目的根目录中运行此命令将安装Gemfile中列出的gem,将lib放在./vendor
中,以及./bin
和require
中的所有可执行文件(如果你使用bundle console
或Bundler需要的)会引用这些exes和libs。
适合我。
答案 6 :(得分:4)
我建议direnv。它是shell的环境切换器。
在每次提示之前,它会检查是否存在" .envrc"当前目录和父目录中的文件。如果该文件存在(并且已授权),则将其加载到bash子shell中,然后由direnv捕获所有导出的变量,然后使其可用于当前shell。
以下是how to use 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-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0
然后为方便起见制作几个符号链接:
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
这会将所有宝石放在项目的.direnv/ruby
目录下(使开放的宝石更容易)。 bundler会将包装器二进制文件放在.direnv/bin
中(不再是bundle exec
!)。
通过在任何use rbenv
文件中添加.envrc
命令,也可以使用rbenv。这将激活rbenv,而rbenv又会将ruby包装器放入PATH中。
请注意,没有必要在.bashrc或.zshrc中安装rbenv以使其正常工作。
这是我在ruby项目中使用的最复杂的.envrc:
rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin
rvm用于为您选择正确的红宝石版本
布局命令自动设置一些常用的环境变量。目前只存在ruby布局。它的作用是将GEM_HOME环境变量及其bin目录设置为您的路径。因为它取决于ruby版本,所以请务必在" rvm"之后调用它。由于每个ruby布局目录都有自己的GEM_HOME,因此您不需要使用rvm的gemsets。
PATH_add会预先添加并扩展给定的相对路径。在这种情况下,我使用它将bundler binstubs与我自己的bin脚本隔离bundle install --binstubs .direnv/bundler-bin
如果你想知道这些命令到底做了什么,目前:cat direnv stdlib
|少
答案 7 :(得分:0)
Mineshaft是一个我已经从事一段时间的项目,并将继续进行开发。
它提供了创建类似于virtualenv工作原理的虚拟环境的功能,并且还可以全局安装Ruby。