Недавно я установил кучу точек на моем Mac вместе с некоторыми другими приложениями (я переключился на iTerm вместо Terminal и Sublime в качестве текстового редактора по умолчанию), но с тех пор все мои виртуальные среды перестали работать, хотя их папки внутри .virtualenvs все еще там, и они выдают следующую ошибку всякий раз, когда я пытаюсь запустить что-либо в них:
dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
Reason: image not found
Trace/BPT trap: 5
Я удалил все файлы, связанные с точечными файлами, и восстановил свой .bash_profile до того, что было раньше, но проблема не устранена. Есть ли способ диагностировать проблему или решить ее легко (например, не нужно создавать все virtualenv заново)?
rmvirtualenv
все еще работает, но при попытке запуститьmkvirtualenv
я получаю следующую ошибку:-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
Итак, кажется, что проблема с моими путями Python, но я не вижу, где проблема, так как я могу запустить Python, и это выглядит нормально.virtualenv
команды сейчас работают теоретически, но, поскольку есть проблема с питоном, они ничего не делают. Так что настоящая проблема с питоном brew. И у меня есть подозрение, что причина кроется в изменении имени в каталогах python. По какой-то причине все эти команды ищут python в папке,/usr/local/Cellar/python/2.7.6
но имя папки на самом деле/usr/local/Cellar/python/2.7.6_1
.2.7.6_1
в2.7.6
. Если хуже стало хуже, вы можете переименовать его обратно.Ответы:
Я нашел решение проблемы здесь , поэтому вся заслуга принадлежит автору.
Суть в том, что когда вы создаете virtualenv, создается много символических ссылок на установленный Homebrew Python.
Вот один пример:
Когда вы обновляете Python, используя Homebrew, а затем запускаете
brew cleanup
, символические ссылки в virtualenv указывают на пути, которые больше не существуют (потому что Homebrew удалил их).Симлинки должны указывать на недавно установленный Python:
Решение состоит в том, чтобы удалить символические ссылки в virtualenv, а затем воссоздать их:
Вероятно, лучше сначала проверить, какие ссылки будут удалены перед их удалением:
На мой взгляд, даже лучше удалять только битые символические ссылки. Вы можете сделать это с помощью GNU
find
:Вы можете установить GNU
find
с Homebrew, если у вас его еще нет:Обратите внимание, что по умолчанию программы GNU, установленные с Homebrew, обычно имеют префикс с буквой
g
. Это сделано для того, чтобы избежать дублированияfind
двоичного файла, который поставляется с OS X.источник
gfind
был идеальным, так как у меня было много неразбитых символических ссылок (например, nodeenv), которые я не хотел удалять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
иначе он будет использовать Python 3.Попробовав несколько вещей, это сработало для меня:
перейдите в каталог virtualenv (но не запускайте workon):
Теперь удалите эти файлы:
Затем, чтобы восстановить ваш venv, запустите:
Теперь вы должны снова увидеть список установленных пакетов.
источник
pipenv --rm
и воссоздавpipenv shell
,pipenv install
Это произошло, когда я обновился до Mac OS X Mavericks от Snow Leopard. Мне тоже пришлось переустанавливать варево заранее. Надеюсь, вы запустили команду freeze для вашего проекта с помощью pip.
Чтобы решить, вы должны обновить пути, на которые указывает виртуальная среда.
brew install python
pip install --upgrade virtualenvwrapper
rmvirtualenv old_project
mkvirtualenv new_project
workon new_project
pip install -r requirements.txt
Это должно оставить проект, как это было раньше.
источник
Ответ версии обновления
@Chris Wedgwood
для храненияsite-packages
(сохранение установленных пакетов)источник
Кажется, правильный способ решить эту проблему - запустить
после того, как вы обновили Python с помощью Homebrew.
Это должна быть общая процедура для любой формулы, которая устанавливает что-то вроде python, у которого есть своя собственная система управления пакетами. При установке
brew install python
вы устанавливаетеpython
иpip
иeasy_install
иvirtualenv
и так далее. Поэтому, если эти инструменты могут самообновляться, лучше всего попробовать это сделать, прежде чем рассматривать Homebrew как источник проблем.источник
virtualenv .
в моей сломанной виртуальной среде. Обновленная версияvirtualenv
затем воссоздала необходимые зависимости, и я был в порядке. Этот процесс был более самоуправляемым и надежным, чем принятый для меня ответ.Если это было вызвано
brew upgrade
обновлением Python, и вы согласны с переходом на предыдущую версию, попробуйтеbrew switch python [previous version]
, напримерbrew switch python 3.6.5
. Отсюда.источник
инструкции virtualenvwrapper
Как указано в принятом ответе, основной причиной, скорее всего, является домашнее обновление, которое означает, что ваши символические ссылки virtualenv указывают на неправильные пути python - подробности см. Здесь .
Для каждого виртуального env вам нужно переназначить символические ссылки, чтобы они указывали на правильный путь к питону (в подвале brew). Вот как это сделать с помощью virtualenvwrapper . Здесь я обновляю виртуальную среду en-my-example-env.
Все сделано.
источник
Любой, кто использует pipenv (и вы должны!), Может просто использовать эти две команды - без активации venv:
источник
pipenv --rm
в папке вашего env, а затемpipenv install --dev
Если вы запустили python3, попробуйте
brew upgrade python3
исправить это для меня.источник
Я недавно столкнулся с этим. Ни одно из вышеперечисленных решений не помогло мне. Кажется, это не было проблемой Python. Когда я работал,
aws s3 ls
я получал следующую ошибку:
dyld: Library not loaded: @executable_path/../.Python
Это означает, что
aws
исполняемый файл библиотеки указывает на то, что он либо не существует, либо поврежден, поэтому я удалил и переустановил,aws-cli
следуя инструкциям по этой ссылке, и это сработало !!источник
Проблема для меня (пользователя MacOS) заключается в том, что
brew
обновлены ссылки Python и virtualenvs на старую версию, которая была удалена.Мы можем проверить и исправить это
источник
У меня была похожая проблема, и я решил ее, просто перестроив виртуальную среду с
virtualenv .
источник
Использование Python 2.7.10.
Одна команда
virtualenv path-to-env
делает это. документацияисточник
У меня был сломан виртуальный env из-за переустановки Homebrew python (из-за этого были сломаны символические ссылки), а также из-за нескольких установок sudo pip, которые я делал ранее. Советы Вэйчжуна были очень полезны для решения проблем без переустановки пакетов. Я также должен был сделать следующее для смешанной проблемы с разрешениями.
sudo chown -R my_username lib / python2.7 / site-packages
источник
Virtualenvs сломаны. Иногда простым способом является удаление папок venv и воссоздание virutalenvs.
источник
Если вы используете pipenv, просто
pipenv --rm
решение проблемы.источник
Я столкнулся с той же проблемой после обновления Brew на моей OSX Catalina.
Попробовав кучу вещей, я обнаружил, что следующее - лучшее и простое решение.
Сначала удалите виртуальный env. (По желанию)
затем воссоздать новый virtualenv
Ссылка: https://www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrade/
источник
Принятый ответ не работает для меня: файл
$WORKON_HOME/*/bin/python2.7
больше не является символической ссылкой, это полноценный исполняемый файл:Решение, увы, полностью удалить и заново создать все с нуля виртуальные среды.
Для справки:
источник
--always-copy
аргумент для его переопределения. По крайней мере, то, что я получил из Руководства пользователя--always-copy
и у меня есть обычные файлы :-(Просто обновление python3 работало на меня:
источник
Я попробовал несколько лучших методов, но они не работали, для меня, которые пытались заставить токсины работать. В итоге получилось:
даже если токс уже был установлен. Выход заканчивается:
источник
Для меня это было просто удалить python3 и pipenv, а затем переустановить их.
источник
Все ответы здесь великолепны, я попробовал пару решений, упомянутых выше Райаном, Крисом и не смог решить проблему, поэтому пришлось идти быстрым и грязным путем.
rm -rf <project dir>
(илиmv <project dir> <backup projct dir>
если вы хотите сохранить резервную копию)git clone <project git url>
Здесь нет ничего нового, но это облегчает жизнь!
источник
Я уверен, что опаздываю на вечеринку, но хочу сказать, что решение этой проблемы намного проще, чем обсуждалось здесь.
Вы можете легко восстановить виртуальную среду без необходимости что-либо удалять / редактировать. Предполагая, что ваша испорченная среда вызывается,
env_to_fix
вы можете сделать следующее:Это восстановит ссылки и исправит среду без необходимости сбрасывать текущее состояние куда-либо и восстанавливать его.
источник
Я столкнулся с той же проблемой, когда указывал время выполнения Python от 2 до 3 на моем Mac, указывая псевдоним python на путь Python 3. Затем я воссоздаю новый virtualenv и переустанавливаю те пакеты, которые мне нужны для моего проекта. Для моего случая использования у меня была программа Python, пишущая на лист Google. Очистите несколько пакетов, которые отличаются от реализации Python 2, и снова все заработало.
источник