Ich verwende MacOSX bash
als meine Shell. Ich habe einen symbolischen Link, der wie folgt erstellt wurde:
ln -s /usr/bin/python python2
Ich habe ein Paket, das python2 verwendet, und ich möchte in meinem aktuellen Arbeitsverzeichnis eine Symbolverknüpfung erstellen, zu /usr/bin/python
der eigentlich python2 gehört. Wenn ich python2
von der Kommandozeile aus einen mache, bekomme ich folgenden Fehler:
python2: realpath couldn't resolve "/usr/bin/python2"
Wenn Sie es jedoch so aufrufen, wird ./python2
der Pfad korrekt aufgelöst. Mein PATH
hat .
drin. Tatsächlich habe ich es zum Testen so modifiziert, dass es nur .
darin enthalten ist.
Wie löse ich das? Vielen Dank!
Kontext
Einige der unten vorgeschlagenen Lösungen funktionieren bei mir nicht. Ich habe versucht, meine Frage so konzentriert und kurz wie möglich zu formulieren, damit die Leute nicht in einem Meer von Texten ertrinken, aber ich muss eindeutig mehr Hintergrundinformationen liefern.
Ich versuche, ein Paket zu entwickeln, das ich aus git geklont habe. Das Originalpaket git-multimail
ist / wurde auf einer Linux-Variante entwickelt (ich vermute Ubuntu). Ich habe versucht, es zu modifizieren, um es und seine Testsuite unter MacOSX mit so wenig Modifikationen wie möglich verwenden zu können. Hier ist, warum einige der vorgeschlagenen Lösungen nicht ideal sind:
Erstellen Sie als Root einen
python2
Symlink in / usr / bin /. Ich suche nach einer Lösung, die dies nicht erfordert. Dies war zu Beginn eine naheliegende Option, aber ich hätte gerne eine Lösung, die das Hostsystem so wenig wie möglich verändert. Aus diesem Grund wollte ich einen temporären Symlink im aktuellen Arbeitsverzeichnis erstellen, die CWD (dh.
) meinem Pfad hinzufügen und diese anschließend löschen (dh den Symlink).Erstellen Sie ein Wrapper-Skript, um das Python-Skript mit dem vorhandenen Python aufzurufen. Das Problem dabei ist, dass ein Großteil der Testsuite die tatsächlichen script_files als ausführbare Dateien verwendet, abhängig von shebang, um die richtige Ausführungsumgebung zu finden. Dies würde eine erhebliche Bearbeitung der Testsuite bedeuten. In diesem Zusammenhang (siehe unten für einen Ausschnitt des Test-Frameworks) müsste ich für jede
.py
Datei einen Wrapper hinzufügen ; Ferner müsste der Benutzer / Entwickler unterschiedliche Regeln für die Verwendung des Pakets kennen, je nachdem, auf welchem System sie sich befinden (dh unter MacOSX sollten Sie die Python-Dateien nicht verwenden, ohne sie über den Wrapper aufzurufen oder explizit aufzurufen/usr/bin/python file.py
).#! /bin/sh D=$(cd $(dirname "$0") && pwd) MULTIMAIL="$D/../git-multimail/git_multimail.py" POST_RECEIVE="$D/../git-multimail/post-receive" TESTREPO=$("$D/create-test-repo") HOME="$D" XDG_CONFIG_HOME="$D" GIT_CONFIG_NOSYSTEM=1 export HOME XDG_CONFIG_HOME GIT_CONFIG_NOSYSTEM cd $TESTREPO test_email() { REFNAME="$1" OLDREV="$2" NEWREV="$3" echo "$OLDREV" "$NEWREV" "$REFNAME" | USER=pushuser "$MULTIMAIL" }
Ändern aller
python2
Verweise aufpython
. Die README-Datei schlägt dies vor, aber dies macht die Versionskontrolle wirkungslos, da das System die Änderung als neue Version ansieht, obwohl dies (semantisch) nicht der Fall ist.
Ich habe (3) verwendet, aber ich versuche, eine bessere Lösung zu finden. Ich bin bereit zu akzeptieren, dass dies genau so ist (dh es gibt keinen geeigneten Weg, um auf 'python2' hinzuweisen, der /usr/bin/python
portabel und unauffällig ist, ohne viele Änderungen an der Testsuite und am tatsächlichen Framework vorzunehmen).
git-multimail.py
es ist #!/usr/bin/env python2
, so gibt es einen (relativ) einfachen Weg , dies zu tun.
ln -s /usr/bin/python2.7 /usr/local/bin/python2
nicht
ln -s /usr/bin/python /usr/bin/python2