Używam MacOSX- bash
a 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/python
którego faktycznie należy Python2. Kiedy robię python2
z linii poleceń, pojawia się ten błąd:
python2: realpath couldn't resolve "/usr/bin/python2"
Ale wywołanie go w ten ./python2
sposób poprawnie rozwiązuje ścieżkę. Mój PATH
ma .
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-multimail
jest / 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
python2
dowią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
.py
pliku; 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
python2
odniesień 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/python
był przenośny i dyskretny bez wielu zmian w pakiecie testowym i aktualnej strukturze).
git-multimail.py
to #!/usr/bin/env python2
, więc jest (stosunkowo) prosty sposób to zrobić.
ln -s /usr/bin/python2.7 /usr/local/bin/python2
nie
ln -s /usr/bin/python /usr/bin/python2