Używam MacOSX- basha jako mojej powłoki. Mam dowiązanie symboliczne, utworzone w ten sposób:
ln -s /usr/bin/python python2
Mam pakiet, który używa Python2 i chcę utworzyć łącze do symbolu w moim bieżącym katalogu roboczym, do /usr/bin/pythonktórego faktycznie należy Python2. Kiedy robię python2z linii poleceń, pojawia się ten błąd:
python2: realpath couldn't resolve "/usr/bin/python2"
Ale wywołanie go w ten ./python2sposób poprawnie rozwiązuje ścieżkę. Mój PATHma .w tym. W rzeczywistości zmodyfikowałem go do testowania, aby mieć tylko .w sobie.
Jak to rozwiązać? Dzięki!
Kontekst
Szereg sugerowanych poniżej rozwiązań nie będzie dla mnie działać. Starałem się wyjaśnić moje pytanie tak skoncentrowane i krótkie, jak to możliwe, aby ludzie nie utonęli w morzu tekstu, ale najwyraźniej muszę podać więcej informacji.
Próbuję rozwinąć pakiet, który sklonowałem z git. Oryginalny pakiet, git-multimailjest / został opracowany na pewnym wariancie systemu Linux (domyślam się Ubuntu). Próbowałem go zmodyfikować, aby móc go używać i jego pakietu testowego na MacOSX przy możliwie jak najmniejszej modyfikacji. Oto dlaczego niektóre z proponowanych rozwiązań nie są idealne:
Jako root utwórz
python2dowiązanie symboliczne w / usr / bin /. Szukam rozwiązania, które nie wymagałoby tego. Na początku była to oczywista opcja, ale chciałbym rozwiązania, które jak najmniej modyfikuje system hosta. Dlatego chciałem utworzyć tymczasowe dowiązanie symboliczne w bieżącym katalogu roboczym, dodać CWD (tj..) Do mojej ścieżki, a następnie zniszczyć to po zakończeniu (tj. Dowiązanie symboliczne).Utwórz skrypt opakowania, aby wywoływał skrypt Pythona z istniejącym pythonem. Problem polega na tym, że znaczna część pakietu testowego używa rzeczywistych plików skryptowych jako plików wykonywalnych, w zależności od shebang w celu znalezienia właściwego środowiska wykonywania. Oznaczałoby to znaczną edycję pakietu testowego. W tym kontekście (patrz poniżej fragment struktury testowej) musiałbym dodać opakowanie dla każdego
.pypliku; ponadto użytkownik / programista musiałby być świadomy różnych zasad korzystania z pakietu w zależności od systemu, w którym jest zainstalowany (tj. w MacOSX upewnij się, że nie używasz plików python bez wywoływania ich przez opakowanie lub jawne wywołanie/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" }Zmiana wszystkich
python2odniesień dopython. README to sugeruje, ale skutecznie czyni kontrolę wersji bezużyteczną, ponieważ system widzi zmianę jako nową wersję, podczas gdy w rzeczywistości nie jest (semantycznie).
Korzystałem (3), ale próbuję znaleźć lepsze rozwiązanie. Jestem skłonny zaakceptować, że tak właśnie jest (tzn. Nie ma odpowiedniego sposobu, aby wskazać „python2”, aby /usr/bin/pythonbył przenośny i dyskretny bez wielu zmian w pakiecie testowym i aktualnej strukturze).
git-multimail.pyto #!/usr/bin/env python2, więc jest (stosunkowo) prosty sposób to zrobić.
ln -s /usr/bin/python2.7 /usr/local/bin/python2nie
ln -s /usr/bin/python /usr/bin/python2