Recentemente, instalei um monte de arquivos dotfiles no meu Mac, juntamente com outros aplicativos (mudei para iTerm em vez de Terminal e Sublime como meu editor de texto padrão), mas desde então todos os meus ambientes virtuais pararam de funcionar, embora suas pastas contenham .virtualenvs ainda estão lá e eles dão o seguinte erro sempre que tento executar alguma coisa neles:
dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
Reason: image not found
Trace/BPT trap: 5
Eu removi todos os arquivos relacionados aos dotfiles e restaurei meu .bash_profile para o que era antes, mas o problema persiste. Existe alguma maneira de diagnosticar o problema ou resolvê-lo de uma maneira fácil (por exemplo, não é necessário criar todos os virtualenvs novamente)?
rmvirtualenv
ainda funciona, mas ao tentar executarmkvirtualenv
, recebo o seguinte erro:-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
Então, parece um problema com meus caminhos python, mas não consigo ver onde está o problema, pois posso executar python e parece bom.virtualenv
comandos estão funcionando agora na teoria, mas como há um problema com o python, eles não fazem nada. Portanto, o verdadeiro problema é com o python do brew. E eu suspeito que o motivo seja devido a uma alteração de nome nos diretórios python. Por alguma razão, todos esses comandos estão procurando python na pasta,/usr/local/Cellar/python/2.7.6
mas o nome da pasta é realmente/usr/local/Cellar/python/2.7.6_1
.2.7.6_1
para2.7.6
. Se o pior acontecer, você poderá renomeá-lo novamente.Respostas:
Encontrei a solução para o problema aqui , então todo o crédito é do autor.
O essencial é que, quando você cria um virtualenv, muitos links simbólicos são criados para o Python instalado no Homebrew.
Aqui está um exemplo:
Quando você atualiza o Python usando o Homebrew e executa
brew cleanup
, os links simbólicos no virtualenv apontam para caminhos que não existem mais (porque o Homebrew os excluiu).Os links simbólicos precisam apontar para o Python recém-instalado:
A solução é remover os links simbólicos no virtualenv e, em seguida, recriá-los:
Provavelmente, é melhor verificar quais links serão excluídos antes de excluí-los:
Na minha opinião, é ainda melhor excluir apenas links simbólicos quebrados. Você pode fazer isso usando o GNU
find
:Você pode instalar o GNU
find
com Homebrew se ainda não o tiver:Observe que, por padrão, os programas GNU instalados com o Homebrew tendem a ser prefixados com a letra
g
. Isso é para evitar sombrear ofind
binário fornecido com o OS X.fonte
gfind
foi perfeito, desde que eu tinha um monte de links simbólicos ininterrupta (por exemplo, nodeenv) que não deseja excluirfind -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
, caso contrário ele irá usar Python 3.Depois de tentar algumas coisas, isso funcionou para mim:
vá para o diretório virtualenv (mas não execute o workon):
Agora exclua esses arquivos:
Em seguida, para reconstruir seu venv, execute:
Agora você deve ver uma lista dos seus pacotes instalados novamente.
fonte
pipenv --rm
e recriarpipenv shell
, #pipenv install
Isso ocorreu quando eu atualizei para o Mac OS X Mavericks do Snow Leopard. Eu tive que reinstalar a preparação de antemão também. Espero que você tenha executado o comando freeze para seu projeto com o pip.
Para resolver, você precisa atualizar os caminhos para os quais o ambiente virtual aponta.
brew install python
pip install --upgrade virtualenvwrapper
rmvirtualenv old_project
mkvirtualenv new_project
workon new_project
pip install -r requirements.txt
Isso deve deixar o projeto como estava antes.
fonte
A
@Chris Wedgwood
resposta de uma versão de atualização para mantersite-packages
(manter os pacotes instalados)fonte
Parece que a maneira correta de resolver esse problema é executar
depois de atualizar o python com o Homebrew.
Esse deve ser um procedimento geral para qualquer fórmula que instale algo como python, que possui seu próprio sistema de gerenciamento de pacotes. Quando você instala
brew install python
, você instalapython
epip
eeasy_install
evirtualenv
e assim por diante. Portanto, se essas ferramentas puderem ser atualizadas automaticamente, é melhor tentar fazer isso antes de considerar o Homebrew como a fonte dos problemas.fonte
virtualenv .
no meu ambiente virtual quebrado. A versão atualizadavirtualenv
então recriou as dependências necessárias e eu estava pronto. Esse processo foi mais autogerenciado e robusto do que a resposta aceita para mim.Se isso foi causado por um
brew upgrade
que atualizou seu Python, e você está bem com o downgrade para a versão anterior, tentebrew switch python [previous version]
, por exemplobrew switch python 3.6.5
. Daqui.fonte
instruções virtualenvwrapper
Conforme indicado na resposta aceita, a causa raiz provavelmente é uma atualização de homebrew que significa que os links simbólicos do virtualenv estão apontando para caminhos de python quebrados - veja detalhes aqui .
Para cada ambiente virtual, é necessário reatribuir os links simbólicos para apontar para o caminho python correto (na adega de fermentação). Aqui está como fazer isso com o virtualenvwrapper . Aqui estou atualizando um ambiente virtual chamado "my-example-env".
Tudo feito.
fonte
Qualquer pessoa que esteja usando o pipenv (e você deve!) Pode simplesmente usar esses dois comandos - sem ter o venv ativado:
fonte
pipenv --rm
na pasta de sua env e depoispipenv install --dev
Se você quebrou o python3, tente corrigi-
brew upgrade python3
lo para mim.fonte
Eu recentemente enfrentei isso. Nenhuma das soluções acima funcionou para mim. Parece que não era realmente problema do Python. Quando eu estava executando
aws s3 ls
, estava recebendo o seguinte erro:
dyld: Library not loaded: @executable_path/../.Python
Isso significa que o
aws
executável da biblioteca está apontando para ou não existe ou está corrompido; portanto, desinstalei e reinstaleiaws-cli
seguindo as instruções deste link e funcionou !!fonte
O problema para mim (usuário do MacOS) é que
brew
atualizei os links Python e virtualenvs para a versão antiga que foi excluída.Podemos verificar e corrigi-lo
fonte
Eu tive um problema semelhante e o resolvi apenas reconstruindo o ambiente virtual com
virtualenv .
fonte
Usando o Python 2.7.10.
Um único comando
virtualenv path-to-env
faz isso. documentaçãofonte
Eu tinha um ambiente virtual quebrado devido a uma reinstalação Homebrew de python (com isso, links simbólicos quebrados) e também alguns "sudo pip install" que eu havia feito anteriormente. As dicas de Weizhong foram muito úteis para corrigir os problemas sem precisar reinstalar os pacotes. Eu também tive que fazer o seguinte para o problema de permissões mistas.
sudo chown -R nome_do_usuário lib / python2.7 / site-packages
fonte
Virtualenvs estão quebrados. Às vezes, a maneira mais simples é excluir as pastas venv e recriar virutalenvs.
fonte
Se você estiver usando o pipenv, apenas
pipenv --rm
resolva o problema.fonte
Eu estava enfrentando o mesmo problema depois de atualizar o brew no meu OSX Catalina.
Depois de tentar vários itens, acho que a seguinte é a melhor e mais fácil solução.
Inicialmente, exclua o ambiente virtual. (Opcional)
depois recrie um novo virtualenv
Referência: https://www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrade/
fonte
A resposta aceita não funciona para mim: o arquivo
$WORKON_HOME/*/bin/python2.7
não é mais um link simbólico, é um executável completo:A solução é, infelizmente, remover completamente e recriar do zero todos os os ambientes virtuais.
Para referência:
fonte
--always-copy
argumento para substituí-lo. Pelo menos o que eu recebi do Guia do usuário--always-copy
e tenho arquivos regulares :-(Simplesmente atualizar o python3 funcionou para mim:
fonte
Eu tentei os poucos métodos principais, mas eles não funcionaram para mim, que estavam tentando fazer o tox funcionar. O que acabou por funcionar foi:
mesmo se o tox já estiver instalado. A saída terminou com:
fonte
O que o corrigiu foi apenas desinstalar o python3 e o pipenv e reinstalá-los.
fonte
Todas as respostas são ótimas aqui, tentei algumas das soluções mencionadas acima por Ryan, Chris e não consegui resolver o problema, por isso tive que seguir um caminho rápido e sujo.
rm -rf <project dir>
(oumv <project dir> <backup projct dir>
se você deseja manter um backup)git clone <project git url>
Nada de romance aqui, mas facilita a vida!
fonte
Estou certo de que estou atrasado para a festa, mas quero dizer que a resolução deste problema é muito mais simples do que discutido aqui.
Você pode regenerar facilmente o ambiente virtual sem precisar excluir / editar nada. Supondo que o seu ambiente quebrado seja chamado,
env_to_fix
você pode apenas o seguinte:Isso regenerará os links e corrigirá o ambiente sem a necessidade de despejar o status atual em algum lugar e restaurá-lo.
fonte
Me deparei com o mesmo problema quando estava apontando o tempo de execução do python de 2 para 3 no meu mac, apontando o alias python para o caminho python 3. Depois, recrio um novo virtualenv e reinstale os pacotes necessários para o meu projeto. Para o meu caso de uso, tive um programa python escrevendo na planilha do google. Limpe alguns pacotes diferentes da implementação do python 2 e, tudo começou a funcionar novamente.
fonte