Powerline: Atualize o MacOS para o Mojave e vim obterá um erro com o powerline

Criado em 25 set. 2018  ·  34Comentários  ·  Fonte: powerline/powerline

erro como segue:

Error detected while processing /Users/vvqboy/.vimrc:
line    8:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module>
    from powerline.lib.config import ConfigLoader
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module>
    from powerline.lib.threaded import MultiRunnedThread
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module>
    from powerline.lib.monotonic import monotonic
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module>
    import ctypes
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module>
    _reset_cache()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache
    CFUNCTYPE(c_int)(lambda: None)
MemoryError
line    9:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'powerline_setup' is not defined
line   10:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'powerline_setup' is not defined
Traceback (most recent call last):
  File "<string>", line 4, in <module>
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module>
    from powerline.lib.config import ConfigLoader
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module>
    from powerline.lib.threaded import MultiRunnedThread
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module>
    from powerline.lib.monotonic import monotonic
  File "/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module>
    import ctypes
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module>
    _reset_cache()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache
    CFUNCTYPE(c_int)(lambda: None)
MemoryError
An error occurred while importing powerline module.
This could be caused by invalid sys.path setting,
or by an incompatible Python version (powerline requires
Python 2.6, 2.7 or 3.2 and later to work). Please consult
the troubleshooting section in the documentation for
Vim: Caught deadly signal SEGV

Vim: Finished.
[1]    7428 segmentation fault  vi .vimrc
cvim macos serror in environment bug

Comentários muito úteis

SOLUÇÃO!!

1) Descubra sua versão atual do vim. O meu _não_ foi compilado com homebrew, mas era a versão padrão do sistema, que foi recompilado pela Apple para o lançamento do Mojave (olhando a data). Eu acho que a declaração anterior é correta, com base na data de compilação, mas me corrija se eu estiver errado. Execute vim --version e você verá que foi compilado por [email protected] .

2) Eu escolhi desinstalar a versão brew'd do python @ 2 e instalei o python via brew (ele instala 3.7.0 por padrão no momento da escrita), e _não_ vinculei-o. Apenas deixei lá. Leia algum fórum afirmando que ele não compila com o brew python a menos que esteja instalado. @ ZyX-I talvez você saiba mais sobre isso?

3) Depois de brew install python , use o homebrew para instalar o vim usando o comando brew install vim . Em seguida, execute /usr/local/bin/vim --version e certifique-se de que o python3 tem um sinal '+' próximo a ele. Reinicie seu shell, e então o /.vimrc deve ler: /Library/Python/2.7/site-packages/powerline/powerline/bindings/vim/ ou qualquer diretório que você esteja olhando.

.... e deve estar funcionando!

Edit: Alguma gramática, escrevi isso sem café.

Todos 34 comentários

vimrc da seguinte forma:

set rtp+=/Users/vvqboy/Library/Python/2.7/lib/python/site-packages/powerline/bindings/vim

" These lines setup the environment to show graphics and colors correctly.
set nocompatible
set t_Co=256

let g:minBufExplForceSyntaxEnable = 1
python from powerline.vim import setup as powerline_setup
python powerline_setup()
python del powerline_setup

if ! has('gui_running')
   set ttimeoutlen=10
   augroup FastEscape
      autocmd!
      au InsertEnter * set timeoutlen=0
      au InsertLeave * set timeoutlen=1000
   augroup END
endif

set laststatus=2 " Always display the statusline in all windows
set guifont=Inconsolata\ for\ Powerline:h14
set noshowmode " Hide the default mode text (e.g. -- INSERT -- below the statusline)

set nu
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab

eu tento

pip install --upgrade --force-reinstall  --user powerline-status

Collecting powerline-status
  Downloading https://files.pythonhosted.org/packages/9c/30/8bd3c62642778af9ad813a526c6ff7dd2f98144d6580ad6fab94ca389265/powerline-status-2.7.tar.gz (233kB)
    100% |████████████████████████████████| 235kB 69kB/s
Building wheels for collected packages: powerline-status
  Running setup.py bdist_wheel for powerline-status ... done
  Stored in directory: /Users/vvqboy/Library/Caches/pip/wheels/c4/81/6b/bb1f440b9999fcfda2a1ccdf7b57a886acb08ea3e9e794945d
Successfully built powerline-status
Installing collected packages: powerline-status
  Found existing installation: powerline-status 2.6
    Uninstalling powerline-status-2.6:
      Successfully uninstalled powerline-status-2.6
Successfully installed powerline-status-2.7

então ainda obterá erro

Vim: Caught deadly signal SEGV
Error detected while processing /Users/vvqboy/.vimrc:Vim: Finished.

line    8:
Exception MemoryError: MemoryError() in <module 'threading' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored
[1]    1788 segmentation fault  vi .vimrc

python --version
Python 2.7.10

Ei, mesmo erro aqui. Tentei algumas correções usando brew (pensei que pode ser um problema de link de sistema), mas tudo parece estar bem lá, e meu pyenv parece bem.

Aqui está o erro que tenho para ter certeza absoluta (e isso aconteceu depois da atualização do Moajve também para mim):

An error occurred while importing powerline module.
This could be caused by invalid sys.path setting,
or by an incompatible Python version (powerline requires
Python 2.6, 2.7 or 3.2 and later to work). Please consult
the troubleshooting section in the documentation for
possible solutions.
Error detected while processing 
...
line  157:
Traceback (most recent call last):
  File "<string>", line 53, in <module>
  File "<string>", line 9, in powerline_troubleshoot
  File "/Users/.../Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module>
    from powerline.lib.config import ConfigLoader
  File "/Users/.../Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module>
    from powerline.lib.threaded import MultiRunnedThread
  File "/Users/.../Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module>
    from powerline.lib.monotonic import monotonic
  File "/Users/.../Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module>
    import ctypes
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module>
    _reset_cache()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache
    CFUNCTYPE(c_int)(lambda: None)
MemoryError

Curiosamente, apontar o caminho para o arquivo _actual_ powerline.vim carregará o vim corretamente e não gerará nenhum erro, mas também não carregará o powerline.

/Library/Python/2.7/site-packages/powerline/powerline/bindings/vim/plugins/powerline.vim

O Vim fica feliz sem carregar o powerline ... Além disso, meu tmux conf carrega o powerline muito bem, então acho que esse é um problema específico do vim-powerline. Vou fazer uma investigação e voltar para você.

Editar: mudar para a versão do sistema de python e executar um shell interativo me permitiu executar
from powerline.vim import VimPowerLine sem qualquer aborrecimento.

Por alguma razão, não consigo comentar a linha CTYPES (algum erro de permissão, investigarei mais tarde), mas não consigo rastrear o arquivo de origem onde a alocação de memória está realmente sendo feita. Alguém sabe onde esse arquivo existe, ou se essa é a maneira certa de proceder?

A versão Python do Vim foi compilada com a versão correspondente do Python que o Vim está realmente usando? MemoryError e SEGV durante a importação de ctypes indicam problemas com a instalação do Python, não problemas de powerline. Você deve ter o mesmo problema (pelo menos, MemoryError, embora eu não tenha certeza do que realmente significa: talvez, o alocador de memória retornando NULL?) Se você desabilitar o powerline e fizer :python import ctypes no vim.

Bingo, isso não funcionou. No entanto, ele estava funcionando perfeitamente bem antes da atualização do MacOS Mojave.

Erro +1 após atualizado para mojave

Traceback (most recent call last):
  File "<string>", line 4, in <module>
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module>
    from powerline.lib.config import ConfigLoader
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module>
    from powerline.lib.threaded import MultiRunnedThread
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module>
    from powerline.lib.monotonic import monotonic
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module>
    import ctypes
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module>
    _reset_cache()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache
    CFUNCTYPE(c_int)(lambda: None)
MemoryError
An error occurred while importing powerline module.
This could be caused by invalid sys.path setting,
or by an incompatible Python version (powerline requires
Python 2.6, 2.7 or 3.2 and later to work). Please consult
the troubleshooting section in the documentation for
possible solutions.
Error detected while processing /usr/local/lib/python2.7/site-packages/powerline/bindings/vim/plugin/powerline.vim:
line  157:
Traceback (most recent call last):
  File "<string>", line 53, in <module>
  File "<string>", line 9, in powerline_troubleshoot
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module>
    from powerline.lib.config import ConfigLoader
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module>
    from powerline.lib.threaded import MultiRunnedThread
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module>
    from powerline.lib.monotonic import monotonic
  File "/Users/zzs/Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module>
    import ctypes
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module>
    _reset_cache()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache
    CFUNCTYPE(c_int)(lambda: None)
MemoryError
Press ENTER or type command to continue

A versão Python do Vim foi compilada com a versão correspondente do Python que o Vim está realmente usando? MemoryError e SEGV durante a importação de ctypes indicam problemas com a instalação do Python, não problemas de powerline. Você deve ter o mesmo problema (pelo menos, MemoryError, embora eu não tenha certeza do que realmente significa: talvez, o alocador de memória retornando NULL?) Se você desabilitar o powerline e fizer :python import ctypes no vim.

Portanto, estava funcionando bem _ logo antes_ da atualização. Minha configuração de zsh e tmux está funcionando bem usando as outras ligações também.

Ao executar o comando: :python import ctypes no vim, obtenho o mesmo erro (o erro CTYPE) conforme mostrado acima. Eu me pergunto o que a Apple mudou na versão enviada do Apple-Python, ou realmente, se eles mudaram alguma coisa. Vou tentar um pouco mais tarde esta noite e voltar atrás.

Zsh e tmux usam o interpretador Python em um processo separado (a menos que você esteja usando zsh com libzpython, mas não há equivalente tmux). O Vim está carregando o Python como uma biblioteca dinâmica via dlopen ou apenas se vincula a ela, que é mais frágil, e se você mudar a versão do Python, precisará recompilar o Vim com a nova ou correrá o risco de ter problemas. Não tenho certeza de como as diferenças nas versões podem fazer com que a importação de ctypes funcione mal tão tarde (normalmente você não conseguiria :python execução, ou às vezes pode travar), mas é uma explicação possível.

Outra é a diferença entre a versão do Python do sistema e homebrew. Não tenho Mac e não posso dizer qual Vim deve carregar dos dois e como exatamente ele faz o feito, mas esta é outra explicação comum de problemas com (app (vim, etc)) + configuração do Python no Mac, e pode causar vários tipos de erros na importação.

@ ZyX-I oooo entendi. Você tem um documento improvisado que descreve o processo? Eu não tinha ideia de que era assim que funcionava.

Deixe-me recompilar o vim com a versão do sistema e ver o que acontece!

SOLUÇÃO!!

1) Descubra sua versão atual do vim. O meu _não_ foi compilado com homebrew, mas era a versão padrão do sistema, que foi recompilado pela Apple para o lançamento do Mojave (olhando a data). Eu acho que a declaração anterior é correta, com base na data de compilação, mas me corrija se eu estiver errado. Execute vim --version e você verá que foi compilado por [email protected] .

2) Eu escolhi desinstalar a versão brew'd do python @ 2 e instalei o python via brew (ele instala 3.7.0 por padrão no momento da escrita), e _não_ vinculei-o. Apenas deixei lá. Leia algum fórum afirmando que ele não compila com o brew python a menos que esteja instalado. @ ZyX-I talvez você saiba mais sobre isso?

3) Depois de brew install python , use o homebrew para instalar o vim usando o comando brew install vim . Em seguida, execute /usr/local/bin/vim --version e certifique-se de que o python3 tem um sinal '+' próximo a ele. Reinicie seu shell, e então o /.vimrc deve ler: /Library/Python/2.7/site-packages/powerline/powerline/bindings/vim/ ou qualquer diretório que você esteja olhando.

.... e deve estar funcionando!

Edit: Alguma gramática, escrevi isso sem café.

Eu tenho o mesmo erro quando atualizei para o Mojave.
line 63: Traceback (most recent call last): File "<string>", line 1, in <module> File "/Users/xxx/Library/Python/2.7/lib/python/site-packages/powerline/__init__.py", line 11, in <module> from powerline.lib.config import ConfigLoader File "/Users/xxx/Library/Python/2.7/lib/python/site-packages/powerline/lib/config.py", line 11, in <module> from powerline.lib.threaded import MultiRunnedThread File "/Users/xxxx/Library/Python/2.7/lib/python/site-packages/powerline/lib/threaded.py", line 7, in <module> from powerline.lib.monotonic import monotonic File "/Users/xxx/Library/Python/2.7/lib/python/site-packages/powerline/lib/monotonic.py", line 19, in <module> import ctypes File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 555, in <module> _reset_cache() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 279, in _reset_cache CFUNCTYPE(c_int)(lambda: None) MemoryError line 64: Traceback (most recent call last): File "<string>", line 1, in <module> NameError: name 'powerline_setup' is not defined line 65: Traceback (most recent call last): File "<string>", line 1, in <module> NameError: name 'powerline_setup' is not defined
Depois de reverter para o python padrão do sistema, ainda recebo o mesmo erro.

@zhongruizhi você tentou o que sugeri acima? Eu postei minha solução e isso consertou para mim!

@anirrudh
obrigado, mas parece que sua solução não é adequada para minha condição. Não estou usando o brew e estou usando o python padrão do sistema (2.7.10) e o vim. (+ Python / dyn -python3).

@anirrudh realmente funciona para mim, uma boa solução, muito obrigado

@zhongruizhi Então eu costumava ter a versão vim padrão fornecida pela Apple também, mas ela parece estar quebrada para powerline, a única correção parece ser instalar o vim via brew - e quanto às versões python, eu trato disso no meu post acima, mas você precisa ter certeza de que + python3 é uma coisa, não + python / dyn, que era exatamente o que o meu apple fornecido vim tinha!

@anirrudh Obrigado por descobrir os detalhes. E funciona.

Encontrei o motivo e uma solução que acho mais elegent:
CFUNCTYPE na função _reset_cache () no arquivo:
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py
obter erro de memória.
Então, pulei para este arquivo e encontrei o código:

265 def _reset_cache():
266     _pointer_type_cache.clear()
267     _c_functype_cache.clear()
268     if _os.name in ("nt", "ce"):
269         _win_functype_cache.clear()
270     # _SimpleCData.c_wchar_p_from_param
271     POINTER(c_wchar).from_param = c_wchar_p.from_param
272     # _SimpleCData.c_char_p_from_param
273     POINTER(c_char).from_param = c_char_p.from_param
274     _pointer_type_cache[None] = c_void_p
275     # XXX for whatever reasons, creating the first instance of a callback
276     # function is needed for the unittests on Win64 to succeed.  This MAY
277     # be a compiler bug, since the problem occurs only when _ctypes is
278     # compiled with the MS SDK compiler.  Or an uninitialized variable?
279     CFUNCTYPE(c_int)(lambda: None)

Como você pode ver, a função CFUNCTYPE na linha 279 é adicionada por unittest no Win64 por quaisquer motivos. Para o usuário do mac, esta linha é inútil e leva a um erro de memória no macOS. Então, comento a linha 279 e executo novamente o vim, não há erros com o powerline.

Mais detalhes:
O arquivo __init__.py é um arquivo somente leitura do sistema e você precisa executar o comando csrutil disable no modo de recuperação mac (pressione command + R ao inicializar) para desabilitar a Proteção de Integridade do Sistema. Após a reinicialização, você pode editar este arquivo usando a permissão de root.

brew install vim --with-lua --with-override-system-vi
e reinicie o shell, corrigido

https://github.com/Valloric/YouCompleteMe/issues/3165#issuecomment -425616700

Obrigado @ Joshua-Chang

Funcionou para mim

obrigado @ Joshua-Chang
vim está ok, mas vi ainda errado
`Vim: Pego sinal mortal SEGV
Erro detectado durante a função de processamento70_PollServerReady [7] ..70_ Pyeval: Vim : Concluído.

linha 4:
Exception MemoryError: MemoryError () emignorado
Falha de segmentação: 11`

vim está ok, mas vi ainda errado

talvez haja uma resolução melhor por aí, mas eu corrigi essa adicionando alias vi="vim" em meu arquivo rc shell

Tenho o mesmo problema com @ always77 quando uso o commad git commit --amend .

@kyriejoshua

tente a sugestão de @Joshua-Chang, funciona para mim.

tente a sugestão de @Joshua-Chang, funciona para mim.

Tentei.
Ele funciona quando eu uso o vim diretamente, mas ainda está errado quando eu executo o comando git commit --amend ou tento consertar conflitos na linha de comando.

Por fim, resolvi esse problema lendo este artigo. @ sempre77
https://ltaoo.github.io/2018/10/22/%E6%9B%B4%E6%96%B0%20macOS%20Mojave%20%E5%90%8E%20vim%20%E6%89%93 % E4% B8% 8D% E5% BC% 80 /

@kyriejoshua Se importa em compartilhar a solução?

É minha solução. @josephtyler

cd ~/.vim/bundle/YouCompleteMe
git pull
git submodule update --init --recursive.
python install.py

e reinicie o shell, corrigido

Para usuários YCM, use os contatos YCM

Estamos rastreando um problema semelhante com o sistema Vim aqui: https://github.com/Valloric/YouCompleteMe/issues/3271

Alerta de spoiler: acho que é coisa do Mojave e não do YCM.

Para mim, o problema começou a aparecer depois que uma "atualização crítica" foi instalada pelo Mojave (por exemplo, estou no Mojave há muito tempo com o vim / powerline funcionando bem). Acontece que era simplesmente um caso de vim errado sendo usado (por exemplo, /usr/bin/vim , o vim integrado da Apple) em vez do meu vim de /usr/local/bin/vim . Foi apenas uma questão de consertar meus PATH ; a atualização provavelmente o reordenou.

Acabei de começar a usar um mac com uma nova instalação do Mojave e tive esse problema, deve-se observar que estou usando o python3.7.

Eu resolvi fazendo o seguinte:

brew install vim
echo "alias vim=/usr/local/Cellar/vim/<VIM_VERSION>/bin/vim" >> ~/.bash_profile

Basta substituir VIM_VERSION com a versão do vim que brew instalado na primeira linha.

Pode adicionar outra confirmação de que isso está relacionado à atualização do macOS Mojave. Vou ter que fazer algum trabalho de comparação com outra máquina que NÃO foi atualizada ainda para ver quais bibliotecas do sistema foram alteradas. Tenho certeza de que é algo que mudou na instalação padrão do python 2.7 (.10) ou algo com uma biblioteca relacionada.

Tive esse mesmo problema vindo do bash para o zsh, o que consertou para mim foi exportar meu PATH . export PATH=$HOME/bin:/usr/local/bin:$PATH

Eu já tinha o python 3.7.3, vim (a versão incluída do macvim compilado por [email protected]), e já tinha o Mojave. Estava apenas fazendo a transição para zsh.

Então, estou batendo a cabeça contra a parede tentando descobrir por que isso não está funcionando para mim um dia depois de ser forçada a atualizar meu laptop de trabalho para o Mojave. Eu segui os guias acima e fiz o powerline funcionar no vim novamente, mas para a minha vida, ele não funcionaria corretamente quando tento git commit .

Verifiquei duas vezes em meu .zshrc se meu editor estava definido como vim . Eu então alias vi=vim , e ainda nenhum dado.

Então, depois de reinstalar o powerline e o vim cerca de cem vezes diferentes, percebi na mensagem de erro (esta sendo uma mensagem de erro muito menor após reiniciar minha janela de terminal novamente e NÃO iniciar o tmux ou qualquer outra coisa:

Vim: Caught deadly signal SEGV
Vim: Finished.
error: /usr/bin/vim died of signal 11
error: There was a problem with the editor '/usr/bin/vim'.
Please supply the message using either -m or -F option.

Bem ali: /usr/bin/vim

Então, verifiquei duas vezes e, eis que em meu .gitconfig encontrei as seguintes linhas:

[core]
editor = /usr/bin/vim

Então, isso foi alterado para apenas editor = vim

TL; DR : Se você ainda está tendo problemas com sua instalação de git commit vim, verifique se seu .gitconfig não está apontando para o vim do sistema.

Esta página foi útil?
0 / 5 - 0 avaliações