python - management - Ruby equivalente de virtualenv?
rvm rails (7)
¿Hay algo similar a la utilidad de Python virtualenv ?
Básicamente, le permite instalar paquetes de Python en un entorno de espacio aislado, por lo que easy_install django
no entra en el directorio de paquetes de sitio de todo el sistema, sino en el directorio virtualenv-created.
Por ejemplo:
$ 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
¿Hay algo como esto para RubyGems?
Creo que te gustará la sandbox .
Mencionaré la forma en que hago esto con Bundler (que uso con RVM - RVM para administrar los rubíes y un conjunto predeterminado de gemas globales, Bundler para manejar las gemas específicas del proyecto)
bundler install --binstubs --path vendor
Ejecutar este comando en la raíz de un proyecto instalará las gemas enumeradas de su Gemfile, colocará las libs en ./vendor
, y cualquier ejecutable en ./bin
y todas las s require
(si usa bundle console
o Bundler requiere) hará referencia estos exes y libs.
Funciona para mi.
Nadie parece haber mencionado a rbenv .
Ni sandbox, RVM ni rbenv administran las versiones de las dependencias de gemas de su aplicación. La herramienta para eso es bundler .
- use un Gemfile como la declaración de dependencia de su aplicación
- utilice
bundle install
para instalar versiones explícitas de estas dependencias en una ubicación aislada - use
bundle exec
para ejecutar su aplicación
Recomiendo direnv . Es un conmutador de entorno para el shell.
Antes de cada solicitud, comprueba la existencia de un archivo ".envrc" en los directorios actuales y principales. Si el archivo existe (y está autorizado), se carga en un subconjunto bash y todas las variables exportadas son luego capturadas por direnv y luego se pone a disposición el shell actual.
Aquí está cómo usar directamente con ruby-install
+ ruby-install
Agregue esto a ~/.direnvrc
use_ruby() {
local ruby_root=$HOME/.rubies/$1
load_prefix "$ruby_root"
layout_ruby
}
Instale ruby-install ( brew install ruby-install
) e instale un montón de rubíes.
ruby-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0
Y luego haga un par de enlaces simbólicos para su conveniencia:
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
Y finalmente en cualquier .envrc
un proyecto:
use ruby 2.0
Esto colocará todas las gemas en el directorio .direnv/ruby
del proyecto (facilita la apertura de las gemas). bundler pondrá los binarios de wrapper en .direnv/bin
(¡no más .direnv/bin
bundle exec
!).
+ rbenv
También es posible usar rbenv agregando el comando use rbenv
en cualquier archivo .envrc
. Esto activará rbenv, que a su vez pondrá los envoltorios de rubí en la RUTA.
Tenga en cuenta que no es necesario instalar rbenv en .bashrc o .zshrc para que esto funcione.
+ RVM
Aquí está el .envrc más complicado que uso en proyectos ruby:
rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin
rvm se usa para seleccionar la versión de ruby adecuada para usted
los comandos de diseño establecen automáticamente algunas de las variables de entorno habituales. Por ahora solo existe el diseño Ruby. Lo que hace es establecer la variable de entorno GEM_HOME y su directorio bin en su ruta. Como depende de la versión de ruby, asegúrese de llamarla después de "rvm". Como cada directorio de diseño de ruby tiene su propio GEM_HOME, no necesita usar los conjuntos de valores de rvm.
PATH_add precede y expande la ruta relativa dada. En ese caso, uso esto para segregar los binstubs bundler de mis propios scripts bin con bundle install --binstubs .direnv/bundler-bin
Si quieres saber qué hacen exactamente esos comandos, por ahora: cat direnv stdlib
| Menos
Si solo necesita instalar gemas como no raíz, intente configurar la variable de entorno GEM_HOME
. Entonces solo ejecuta gem
.
Por ejemplo:
$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
RVM funciona más cerca de cómo funciona virtualenv ya que te permite sandbox diferentes versiones de rubíes y sus gemas, etc.