[RUBY] Explication pour ceux qui ont des problèmes avec "commande introuvable" dans rbenv ou pyenv

Lecteurs cibles: débutants de Ruby, Python, etc. qui ont des problèmes avec ce message d'erreur

$ fluentd
rbenv: fluentd: command not found

The `fluentd' command exists in these Ruby versions:
   2.6.3

Si vous utilisez «** env» comme rbenv ou pyenv, vous pouvez recevoir un message d'erreur comme celui-ci.

Pour résoudre ce problème, vous devez comprendre comment fonctionne «** env».

Comment fonctionne ** env

En premier lieu, si vous utilisez «** env», le simple fait de déplacer le répertoire comme celui-ci changera automatiquement la version de «ruby» ou «python», mais comment est-ce réalisé? Êtes-vous là?

$ ruby --version
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
$ cd my-project
$ cat .ruby-version
2.4.5
$ ruby --version
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-darwin18]

En fait, le "rubis" qui court ici n'est pas le vrai "rubis"! C'est un script situé dans ~ / .rbenv / shims /.

$ which ruby
/Users/x-xxxxx/.rbenv/shims/ruby

$ cat ~/.rbenv/shims/ruby
#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "ruby" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export RBENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export RBENV_ROOT="/Users/x-xxxxx/.rbenv"
exec "/Users/x-xxxxx/.rbenv/libexec/rbenv" exec "$program" "$@"

Il en va de même pour les commandes groupées telles que «bundler» et «gem», et les commandes ajoutées par Gem.

$ which gem
/Users/x-xxxxx/.rbenv/shims/gem

$ which bundle
/Users/x-xxxxx/.rbenv/shims/bundle

$ which fluentd
/Users/x-xxxxx/.rbenv/shims/fluentd

Et si vous configurez normalement avec rbenv init,~ / .rbenv / shims /sera ajouté au début de $ PATH et il sera utilisé avec la priorité la plus élevée.

Débit jusqu'à ce que le message d'erreur s'affiche

Le script ~ / .rbenv / shims / tente d'exécuter la commande du même nom dans la ** version actuellement utilisée de Ruby **.

Par conséquent, si la commande n'est pas installée sur la ** version actuellement utilisée de Ruby **, une erreur se produira;

  1. Vous exécutez fluentd
  2. $ PATH est recherché depuis le début et trouvé en premier ~ / .rbenv / shims / fluentd est exécuté
  3. ~ / .rbenv / shims / fluentd recherche le répertoire courant pour .rbenv-version pour déterminer la version de Ruby.
  4. J'essaye d'exécuter flunetd dans cette version de Ruby, mais je ne trouve pas fluentd (bien qu'il soit installé dans une autre version de Ruby)
  5. Affichez le message d'erreur suivant
$ fluentd
rbenv: fluentd: command not found

The `fluentd' command exists in these Ruby versions:
   2.6.3

Contre-mesures

Spécifiez la commande avec un chemin absolu

Exécutez directement sans passer par ~ / .rbenv / shims / hoge.

~/.rbenv/versions/2.6.1/bin/ruby

Ajouter au début de $ PATH

Ajoutez le chemin avant ~ / .rbenv / shims.

Notez que Ruby et Python ont la possibilité d'installer des commandes dans un répertoire directement sous votre home (pas dans le répertoire de l'interpréteur). C'est une bonne idée d'ajouter ce répertoire à votre $ PATH.

$ export PYTHONUSERBASE=~/.local
$ pip3 install --user awscli
$ ls ~/.local/bin jupyter-notebook
$ ls ~/.local/bin/
jupyter
jupyter-bundlerextension
jupyter-console
jupyter-kernel
...
# ~/.bashrc
eval "$(pyenv init -)"
export PATH=$HOME/.local/bin:$PATH

N'utilisez pas rbenv init

En fait, vous pouvez construire Ruby avec rbenv install sans utiliser rbenv init.

Pour certaines personnes, cela peut suffire à construire.

Utilisé via pipenv ou bundler

L'installation et l'utilisation des commandes Ruby et Python à l'échelle mondiale sont la source de problèmes en premier lieu. Utilisez toujours via pipenv ou bundler.

Recommended Posts

Explication pour ceux qui ont des problèmes avec "commande introuvable" dans rbenv ou pyenv
Pour ceux qui ont des problèmes avec une erreur lors de l'installation de pip xg boost
Pour ceux qui ont des problèmes car NFC est lu à l'infini lors de la lecture de NFC avec Python
Procédure de construction de l'environnement pour ceux qui ne sont pas familiarisés avec le système de gestion de version python
Commande introuvable avec sudo rosdep dans la configuration ROS
Pour ceux qui analysent dans l'atmosphère (modèle de régression linéaire 1)
Avez-vous des problèmes avec "pipenv.exceptions.ResolutionFailure"?
Mesures Java SE8 Gold (pour ceux qui ne sont pas bons dans ce domaine)
[YOLO v5] Détection d'objets pour les personnes masquées et celles qui ne le sont pas
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
[Résolu] J'ai une question pour ceux qui connaissent la mécanisation de Python.
Mesures Java SE8 Gold (pour ceux qui ne sont pas bons dans ce domaine)
Ansible, un outil d'automatisation d'infrastructure pour les personnes qui ne sont pas douées pour Ruby
Développement d'une application de calcul de table simple pour les personnes qui ne sont pas douées d'Excel
[YOLO v5] Détection d'objets pour les personnes masquées et celles qui ne le sont pas
Procédure de construction de l'environnement pour ceux qui ne sont pas familiarisés avec le système de gestion de version python
Explication pour ceux qui ont des problèmes avec "commande introuvable" dans rbenv ou pyenv
Machine d'inspection par imagerie pour ceux qui ne font pas de leur mieux
Pour ceux qui analysent dans l'atmosphère (modèle de régression linéaire 1)
Pour ceux qui débutent en programmation mais qui ont décidé d'analyser les données avec Python