[PYTHON] Erklärung für diejenigen, die Probleme mit "Befehl nicht gefunden" in rbenv oder pyenv haben

Zielgruppe: Anfänger von Ruby, Python usw., die Probleme mit dieser Fehlermeldung haben

$ fluentd
rbenv: fluentd: command not found

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

Wenn Sie "** env" wie "rbenv" oder "pyenv" verwenden, wird möglicherweise eine solche Fehlermeldung angezeigt.

Um dieses Problem zu lösen, müssen Sie verstehen, wie ** env funktioniert.

Wie ** env funktioniert

Wenn Sie ** env verwenden, wird durch einfaches Verschieben des Verzeichnisses automatisch die Version von ruby oder python gewechselt. Wie wird dies jedoch realisiert? Bist du da?

$ 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]

Eigentlich ist der hier laufende Rubin nicht der echte Rubin! Es ist ein Skript in ~ / .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" "$@"

Gleiches gilt für gebündelte Befehle wie "Bundler" und "Gem" sowie für von Gem hinzugefügte Befehle.

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

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

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

Und wenn Sie normalerweise mit "rbenv init" einrichten, wird "~ / .rbenv / shims /" am Anfang von $ PATH hinzugefügt und mit der höchsten Priorität verwendet.

Fluss, bis die Fehlermeldung angezeigt wird

Das Skript ~ / .rbenv / shims / versucht, den gleichnamigen Befehl in der derzeit verwendeten ** Version von Ruby ** auszuführen.

Wenn der Befehl nicht auf der derzeit verwendeten ** Version von Ruby ** installiert ist, tritt daher ein Fehler auf.

  1. Sie führen "fließend"
  2. $ PATH wird von Anfang an gesucht und zuerst gefunden ~ / .rbenv / shims / fluentd wird ausgeführt
  3. ~ / .rbenv / shims / fluentd durchsucht das aktuelle Verzeichnis nach .rbenv-Version, um die Ruby-Version zu ermitteln.
  4. Ich versuche, "flunetd" in dieser Version von Ruby auszuführen, kann aber "fluentd" nicht finden (obwohl es in einer anderen Version von Ruby installiert ist).
  5. Zeigen Sie die folgende Fehlermeldung an
$ fluentd
rbenv: fluentd: command not found

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

Gegenmaßnahmen

Geben Sie den Befehl mit einem absoluten Pfad an

Direkt ausführen, ohne ~ / .rbenv / shims / hoge zu durchlaufen.

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

Fügen Sie am Anfang von $ PATH hinzu

Fügen Sie den Pfad vor ~ / .rbenv / shims hinzu.

Beachten Sie, dass Ruby und Python Befehle in einem Verzeichnis direkt unter Ihrer Startseite installieren können (nicht im Interpreter-Verzeichnis). Es ist eine gute Idee, dieses Verzeichnis zu Ihrem $ PATH hinzuzufügen.

$ 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

Verwenden Sie nicht rbenv init

Tatsächlich können Sie Ruby mit rbenv install erstellen, ohne rbenv init zu verwenden.

Für einige Leute kann es genug sein, um zu bauen.

Wird über Pipenv oder Bundler verwendet

Die globale Installation und Verwendung von Ruby- und Python-Befehlen ist in erster Linie die Ursache für Probleme. Immer über Pipenv oder Bundler verwenden.

Recommended Posts

Erklärung für diejenigen, die Probleme mit "Befehl nicht gefunden" in rbenv oder pyenv haben
Für diejenigen, die Probleme mit einem Fehler haben, wenn pip xg boost installiert
Für diejenigen, die in Schwierigkeiten sind, weil NFC beim Lesen von NFC mit Python endlos gelesen wird
Verfahren zur Erstellung der Umgebung für diejenigen, die mit dem Python-Versionsverwaltungssystem nicht vertraut sind
Befehl mit sudo rosdep im ROS-Setup nicht gefunden
Für diejenigen, die in der Atmosphäre analysieren (lineares Regressionsmodell 1)
Haben Sie Probleme mit "pipenv.exceptions.ResolutionFailure"?
Java SE8 Gold misst (für diejenigen, die nicht gut darin sind)
[YOLO v5] Objekterkennung für maskierte und nicht maskierte Personen
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
[Gelöst] Ich habe eine Frage an diejenigen, die mit Python-Mechanisierung vertraut sind.
Java SE8 Gold misst (für diejenigen, die nicht gut darin sind)
Ansible, ein Tool zur Automatisierung der Infrastruktur für Leute, die Ruby nicht gut können
Entwickelte eine einfache Tabellenberechnungs-App für Leute, die nicht gut in Excel sind
[YOLO v5] Objekterkennung für maskierte und nicht maskierte Personen
Verfahren zur Erstellung der Umgebung für diejenigen, die mit dem Python-Versionsverwaltungssystem nicht vertraut sind
Erklärung für diejenigen, die Probleme mit "Befehl nicht gefunden" in rbenv oder pyenv haben
Bildgebende Inspektionsmaschine für diejenigen, die nicht ihr Bestes geben
Für diejenigen, die in der Atmosphäre analysieren (lineares Regressionsmodell 1)
Für diejenigen, die neu in der Programmierung sind, sich aber entschieden haben, Daten mit Python zu analysieren