Niedawno zainstalowałem na swoim komputerze Mac kilka plików dotfile wraz z kilkoma innymi aplikacjami (zmieniłem na iTerm zamiast Terminal i Sublime jako domyślny edytor tekstu), ale odtąd wszystkie moje środowiska wirtualne przestały działać, chociaż ich foldery w .virtualenvs nadal tam są i za każdym razem, gdy próbuję coś w nich uruchomić, zgłaszają następujący błąd:
dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
Reason: image not found
Trace/BPT trap: 5
Usunąłem wszystkie pliki związane z plikami kropkowymi i przywróciłem mój profil .bash do poprzedniego stanu, ale problem nadal występuje. Czy jest jakiś sposób na zdiagnozowanie problemu lub rozwiązanie go w prosty sposób (np. Bez konieczności ponownego tworzenia wszystkich wirtualnych wirtualnych programów)?
rmvirtualenv
nadal działa, ale podczas próby uruchomieniamkvirtualenv
, pojawia się następujący błąd:-bash: /usr/local/bin/virtualenv: /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resour: bad interpreter: No such file or directory
Tak, wydaje się problem z moimi ścieżkami Pythona, ale nie mogę zobaczyć, gdzie jest problem, ponieważ mogę uruchomić Python i wydaje się w porządku.virtualenv
polecenia działają teraz teoretycznie, ale ponieważ istnieje problem z pythonem, nic nie robią. Tak więc prawdziwy problem dotyczy pytona Brew. Podejrzewam, że przyczyną jest zmiana nazwy w katalogach Pythona. Z jakiegoś powodu wszystkie te polecenia szukają Pythona w folderze,/usr/local/Cellar/python/2.7.6
ale nazwa folderu jest w rzeczywistości/usr/local/Cellar/python/2.7.6_1
.2.7.6_1
na2.7.6
. Jeśli gorzej stanie się najgorsze, możesz zmienić jego nazwę z powrotem.Odpowiedzi:
Tutaj znalazłem rozwiązanie problemu , więc cały kredyt należy się autorowi.
Istotą jest to, że podczas tworzenia virtualenv powstaje wiele dowiązań symbolicznych do zainstalowanego Pythona Homebrew.
Oto jeden przykład:
Po uaktualnieniu Pythona za pomocą Homebrew, a następnie uruchomieniu
brew cleanup
, dowiązania symboliczne w virtualenv wskazują ścieżki, które już nie istnieją (ponieważ Homebrew je usunął).Dowiązania symboliczne muszą wskazywać na nowo zainstalowany Python:
Rozwiązaniem jest usunięcie dowiązań symbolicznych w virtualenv, a następnie ich odtworzenie:
Prawdopodobnie najlepiej sprawdzić, które linki zostaną usunięte przed ich usunięciem:
Moim zdaniem jeszcze lepiej jest usuwać tylko uszkodzone dowiązania symboliczne. Możesz to zrobić za pomocą GNU
find
:Możesz zainstalować GNU
find
z Homebrew, jeśli jeszcze go nie masz:Zauważ, że domyślnie programy GNU instalowane z Homebrew zwykle mają literę
g
. Ma to na celu uniknięcie cieniowania plikufind
binarnego dostarczanego z systemem OS X.źródło
gfind
było idealne, ponieważ miałem wiele nieprzerwanych dowiązań symbolicznych (np. Nodeenv), których nie chciałem usuwaćfind -L ~/.virtualenvs/my-virtual-env/ -type l | xargs rm
pip3 freeze dyld: lazy symbol binding failed: Symbol not found: __Py_UnixMain
virtualenv ~/.virtualenvs/foo -p python2
w przeciwnym razie użyje Python 3.Po wypróbowaniu kilku rzeczy zadziałało to dla mnie:
przejdź do katalogu virtualenv (ale nie uruchamiaj workon):
Teraz usuń te pliki:
Następnie, aby odbudować swój venv, uruchom:
Powinieneś teraz ponownie zobaczyć listę zainstalowanych pakietów.
źródło
pipenv --rm
i odtwarzając ponowniepipenv shell
,pipenv install
Stało się tak, gdy zaktualizowałem system Mac OS X Mavericks do systemu Snow Leopard. Musiałem też ponownie zainstalować napar. Mam nadzieję, że uruchomiłeś polecenie zamrażania dla swojego projektu za pomocą pip.
Aby rozwiązać ten problem, musisz zaktualizować ścieżki wskazane przez środowisko wirtualne.
brew install python
pip install --upgrade virtualenvwrapper
rmvirtualenv old_project
mkvirtualenv new_project
workon new_project
pip install -r requirements.txt
To powinno opuścić projekt tak, jak było wcześniej.
źródło
Odpowiedź wersji aktualizacji
@Chris Wedgwood
na utrzymaniesite-packages
(utrzymanie zainstalowanych pakietów)źródło
Wydaje się, że właściwym sposobem rozwiązania tego problemu jest uruchomienie
po aktualizacji Pythona do Homebrew.
Powinna to być ogólna procedura dla każdej formuły instalującej coś takiego jak Python, który ma własny system zarządzania pakietami. Podczas instalacji
brew install python
, instalacjipython
ipip
ieasy_install
ivirtualenv
i tak dalej. Tak więc, jeśli te narzędzia można samodzielnie zaktualizować, najlepiej spróbować to zrobić, zanim zaczniesz szukać Homebrew jako źródła problemów.źródło
virtualenv .
w moim uszkodzonym środowisku wirtualnym. Zaktualizowana wersjavirtualenv
tego odtworzyła niezbędne zależności i byłam gotowa. Ten proces był bardziej samodzielny i bardziej solidny niż zaakceptowana dla mnie odpowiedź.Jeśli było to spowodowane przez
brew upgrade
aktualizację Pythona i nie możesz przejść do poprzedniej wersji, spróbujbrew switch python [previous version]
npbrew switch python 3.6.5
. Stąd.źródło
instrukcje virtualenvwrapper
Jak wskazano w zaakceptowanej odpowiedzi, główną przyczyną jest prawdopodobnie aktualizacja homebrew, co oznacza, że twoje dowiązania symboliczne virtualenv wskazują na uszkodzone ścieżki pytona - zobacz szczegóły tutaj .
Dla każdej wirtualnej env należy ponownie przypisać dowiązania symboliczne, aby wskazywały prawidłową ścieżkę pytona (w piwnicy piwnej). Oto jak to zrobić za pomocą virtualenvwrapper . Tutaj aktualizuję wirtualną env o nazwie „my-example-env”.
Wszystko gotowe.
źródło
Każdy, kto używa pipenv (i powinieneś!) Może po prostu użyć tych dwóch poleceń - bez aktywacji venv:
źródło
pipenv --rm
w folderze swojej env, a następniepipenv install --dev
Jeśli wyeliminowałeś Python3, po prostu spróbuj
brew upgrade python3
to naprawić.źródło
Ostatnio miałem z tym problem. Żadne z powyższych rozwiązań nie działało dla mnie. Wygląda na to, że tak naprawdę nie był to problem Pythona. Kiedy działałem
aws s3 ls
, otrzymywałem następujący błąd:
dyld: Library not loaded: @executable_path/../.Python
Oznacza to, że
aws
plik wykonywalny biblioteki wskazuje, że albo nie istnieje, albo jest uszkodzony, dlatego odinstalowałem i ponownie zainstalowałemaws-cli
instrukcje z tego łącza i działało !!źródło
Problem dla mnie (użytkownika MacOS) polega na tym, że
brew
zaktualizowałem łącza Python i virtualenvs do starej wersji, która została usunięta.Możemy to sprawdzić i naprawić
źródło
Miałem podobny problem i rozwiązałem go, po prostu odbudowując środowisko wirtualne
virtualenv .
źródło
Korzystanie z Python 2.7.10.
Wystarczy jedno polecenie
virtualenv path-to-env
. dokumentacjaźródło
Miałem zepsutą wirtualną env ze względu na ponowną instalację Homebrew Pythona (tym samym zepsute dowiązania symboliczne), a także kilka „sudo pip install”, które zrobiłem wcześniej. Wskazówki Weizhonga były bardzo pomocne w rozwiązywaniu problemów bez konieczności ponownej instalacji pakietów. Musiałem też wykonać następujące czynności dla problemu mieszanych uprawnień.
sudo chown -R moja_nazwa_użytkownika lib / python2.7 / site-packages
źródło
Virtualenvs są zepsute. Czasami prostym sposobem jest usunięcie folderów venv i odtworzenie virutalenvs.
źródło
Jeśli używasz pipenv, samo działanie
pipenv --rm
rozwiązuje problem.źródło
Ten sam problem napotkałem po uaktualnieniu naparu na mojej OSX Catalina.
Po wypróbowaniu wielu rzeczy uważam, że poniższe jest najlepszym i łatwym rozwiązaniem.
Najpierw usuń wirtualną środowisko. (Opcjonalny)
następnie odtwórz nowy virtualenv
Odniesienie: https://www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrade/
źródło
Przyjęta odpowiedź nie działa dla mnie: plik
$WORKON_HOME/*/bin/python2.7
nie jest już dowiązaniem symbolicznym, jest pełnowartościowym plikiem wykonywalnym:Rozwiązaniem jest, niestety, całkowite usunięcie i ponowne utworzenie od podstaw wszystkich środowisk wirtualnych.
Dla odniesienia:
źródło
--always-copy
argumentu, aby je zastąpić. Przynajmniej to, co otrzymałem z Podręcznika użytkownika--always-copy
i mam zwykłe pliki :-(Po prostu aktualizacja Python3 działała dla mnie:
źródło
Wypróbowałem kilka najlepszych metod, ale one nie działały, dla mnie, które próbowały sprawić, by toksyna działała. Ostatecznie zadziałało:
nawet jeśli toksyna została już zainstalowana. Wyjście zakończyło się:
źródło
Naprawiłem to po prostu odinstalowując python3 i pipenv, a następnie ponownie je instalując.
źródło
Wszystkie odpowiedzi są tutaj świetne, wypróbowałem kilka rozwiązań wspomnianych powyżej przez Ryana, Chrisa i nie mogłem rozwiązać problemu, więc musiałem postępować szybko i brudnie.
rm -rf <project dir>
(lubmv <project dir> <backup projct dir>
jeśli chcesz zachować kopię zapasową)git clone <project git url>
Nie ma tu nic nowego, ale ułatwia życie!
źródło
Jestem pewien, że spóźniłem się na imprezę, ale chcę powiedzieć, że rozwiązanie tego problemu jest znacznie prostsze niż tutaj omówione.
Możesz łatwo zregenerować środowisko wirtualne bez konieczności usuwania / edytowania czegokolwiek. Zakładając, że wywoływane jest twoje uszkodzone środowisko
env_to_fix
, możesz po prostu wykonać następujące czynności:To zregeneruje łącza i naprawi środowisko bez konieczności zrzucania gdzieś bieżącego stanu i przywracania go.
źródło
Ten sam problem napotkałem, gdy wskazywałem czas działania Pythona od 2 do 3 na komputerze Mac, wskazując alias python na ścieżkę Python 3. Następnie odtwarzam nowy virtualenv i ponownie instaluję pakiety potrzebne do mojego projektu. W moim przypadku miałem program napisający w Pythonie, który pisze w arkuszu google. Wyczyść kilka pakietów, które różnią się od implementacji Pythona 2 i wa la, wszystko zaczęło działać ponownie.
źródło