Powerline: Обновите MacOS до Mojave, затем vim получит ошибку с powerline

Созданный на 25 сент. 2018  ·  34Комментарии  ·  Источник: powerline/powerline

ошибка, как показано ниже:

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

Самый полезный комментарий

РЕШЕНИЕ!!

1) Определите свою текущую версию vim. Моя была _не_ скомпилирована с помощью homebrew, но была системной версией по умолчанию, которая была перекомпилирована Apple для выпуска Mojave (если посмотреть на дату). Я думаю, что предыдущее заявление было точным, исходя из даты компиляции, но поправьте меня, если я ошибаюсь. Запустите vim --version и вы увидите, что он был скомпилирован [email protected] .

2) Я решил удалить заваренную версию python @ 2 и установил python через brew (на момент написания по умолчанию он устанавливает 3.7.0) и _did not_ связывает его. Просто оставил это там. Прочтите какой-нибудь форум, в котором говорится, что он не компилируется с brew python, если он не установлен. @ ZyX-Я, может быть, ты знаешь об этом больше?

3) После brew install python используйте homebrew для установки vim с помощью команды brew install vim . Затем запустите /usr/local/bin/vim --version и убедитесь, что рядом с python3 стоит знак «+». Перезагрузите оболочку, и тогда /.vimrc должен прочитать: /Library/Python/2.7/site-packages/powerline/powerline/bindings/vim/ или любой другой каталог, который вы просматриваете.

.... и он должен работать!

Изменить: немного грамматики, написал это без кофе.

Все 34 Комментарий

vimrc следующим образом:

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

Я стараюсь

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

тогда все равно получаю ошибку

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

Эй, здесь та же ошибка. Пробовал пару исправлений с помощью brew (подумал, что это может быть проблема с символьной ссылкой), но, похоже, все там хорошо, и мой pyenv кажется прекрасным.

Вот ошибка, которую я должен быть уверен вдвойне (и это произошло после обновления Moajve и для меня):

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

Интересно, что указание пути к файлу _actual_ powerline.vim загрузит vim нормально и не выдаст никаких ошибок, но также не загрузит powerline.

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

Vim с радостью пыхтит БЕЗ загрузки powerline ... Кроме того, мой tmux conf отлично загружает powerline, поэтому я думаю, что это проблема, специфичная для vim-powerline. Я проведу небольшое расследование и вернусь к вам.

Изменить: переключение на системную версию python и запуск интерактивной оболочки позволило мне запустить
from powerline.vim import VimPowerLine без лишних хлопот.

По какой-то причине я не могу закомментировать строку CTYPES (некоторая ошибка разрешений, рассмотрим подробнее позже), но я не могу отследить исходный файл, в котором фактически выполняется выделение памяти. Кто-нибудь знает, где существует этот файл, или это даже правильный способ продолжить?

Была ли версия Python Vim скомпилирована с соответствующей версией Python, которую Vim фактически использует? MemoryError, а затем SEGV при импорте ctypes указывает на проблемы с установкой Python, а не на проблемы с питанием. Вы должны получить ту же проблему (по крайней мере, MemoryError, хотя я не уверен, что это на самом деле означает: возможно, распределитель памяти возвращает NULL?), Если вы отключите powerline и сделаете :python import ctypes в vim.

Бинго, это не сработало. Однако до обновления MacOS Mojave он работал абсолютно нормально.

Ошибка +1 после обновления до мохаве

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

Была ли версия Python Vim скомпилирована с соответствующей версией Python, которую Vim фактически использует? MemoryError, а затем SEGV при импорте ctypes указывает на проблемы с установкой Python, а не на проблемы с питанием. Вы должны получить ту же проблему (по крайней мере, MemoryError, хотя я не уверен, что это на самом деле означает: возможно, распределитель памяти возвращает NULL?), Если вы отключите powerline и сделаете :python import ctypes в vim.

Так что он работал нормально _ просто перед_ обновлением. Мои настройки zsh и tmux работают нормально и с другими привязками.

При запуске команды: :python import ctypes в vim я получаю ту же ошибку (ошибка CTYPE), как показано выше. Интересно, что Apple изменила в поставляемой версии Apple-Python, или действительно, изменили ли они что-нибудь. Я попробую сегодня вечером немного позже и вернусь назад.

Zsh и tmux используют интерпретатор Python в отдельном процессе (если вы не используете zsh с libzpython, но нет эквивалента tmux). Vim либо загружает Python как динамическую библиотеку через dlopen, либо просто связывается с ней, что является более хрупким, и если вы когда-нибудь измените версию Python, вам нужно перекомпилировать Vim с новой, иначе возникнут проблемы. Я не уверен, как различия в версиях могут привести к сбою импорта ctypes на столь позднем этапе (обычно :python запускается вообще, или иногда он может дать сбой), но это одно из возможных объяснений.

Еще одна разница между системной и доморощенной версией Python. У меня нет Mac, и я не могу сказать, какой Vim должен загружать из двух и как именно он выполняет эту задачу, но это еще одно распространенное объяснение проблем с (app (vim и т. Д.)) + Python setup на Mac, и это может вызвать различные ошибки при импорте.

@ ZyX-Я оооо понял. У вас есть документ с описанием процесса? Я понятия не имел, как это работает.

Позвольте мне перекомпилировать vim с системной версией и посмотреть, что произойдет!

РЕШЕНИЕ!!

1) Определите свою текущую версию vim. Моя была _не_ скомпилирована с помощью homebrew, но была системной версией по умолчанию, которая была перекомпилирована Apple для выпуска Mojave (если посмотреть на дату). Я думаю, что предыдущее заявление было точным, исходя из даты компиляции, но поправьте меня, если я ошибаюсь. Запустите vim --version и вы увидите, что он был скомпилирован [email protected] .

2) Я решил удалить заваренную версию python @ 2 и установил python через brew (на момент написания по умолчанию он устанавливает 3.7.0) и _did not_ связывает его. Просто оставил это там. Прочтите какой-нибудь форум, в котором говорится, что он не компилируется с brew python, если он не установлен. @ ZyX-Я, может быть, ты знаешь об этом больше?

3) После brew install python используйте homebrew для установки vim с помощью команды brew install vim . Затем запустите /usr/local/bin/vim --version и убедитесь, что рядом с python3 стоит знак «+». Перезагрузите оболочку, и тогда /.vimrc должен прочитать: /Library/Python/2.7/site-packages/powerline/powerline/bindings/vim/ или любой другой каталог, который вы просматриваете.

.... и он должен работать!

Изменить: немного грамматики, написал это без кофе.

У меня такая же ошибка, когда я перешел на Мохаве.
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
После того, как я вернулся к системному питону по умолчанию, у меня все еще была та же ошибка.

@zhongruizhi ты пробовал то, что я предлагал выше? Я опубликовал свое решение, и оно исправлено для меня!

@anirrudh
спасибо, но похоже, что ваше решение не совсем подходит для моего состояния. Я не использую brew, а использую системные значения по умолчанию python (2.7.10) и vim. (+ Python / dyn -python3).

@anirrudh это действительно работает для меня, хорошее решение, большое спасибо

@zhongruizhi Итак, у меня была стандартная версия vim, предоставляемая Apple, но она, похоже, не работает для powerline, единственное исправление, похоже, заключается в установке vim через brew - а что касается версий python, я обращаюсь к этому в моем сообщение выше, но вам нужно убедиться, что + python3 - это вещь, а не + python / dyn, что было именно тем, что было у моего яблока, предоставленного vim!

@anirrudh Спасибо за то, что разобрались в деталях. И это работает.

Я нашел причину и решение, которое считаю более элегантным:
CFUNCTYPE в функции _reset_cache () в файле:
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py
получить ошибку памяти.
Затем я перешел к этому файлу и нашел такой код:

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)

Как видите, функция CFUNCTYPE в строке 279 добавляется unittest в Win64 по каким-либо причинам. Для пользователя Mac эта строка бесполезна и приводит к ошибке памяти в macOS. Поэтому я закомментирую строку 279 и перезапускаю vim, ошибок с powerline нет.

Подробнее:
Файл __init__.py является системным файлом только для чтения, и вам нужно запустить команду csrutil disable в режиме восстановления Mac (нажмите command + R при загрузке), чтобы отключить защиту целостности системы. После перезагрузки вы можете редактировать этот файл, используя права root.

brew install vim --with-lua --with-override-system-vi
и перезапустите оболочку, исправлено

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

Спасибо @ Джошуа-Чанг

Это сработало для меня

спасибо @ Джошуа-Чанг
vim в порядке, но vi по-прежнему ошибается
`Vim: поймал смертельный сигнал SEGV
Ошибка при обработке функции70_PollServerReady [7] ..70_ Пьевал: Вим : Готово.

строка 4:
Исключение MemoryError: MemoryError () вигнорируется
Ошибка сегментации: 11`

vim в порядке, но vi по-прежнему ошибается

может быть, есть лучшее разрешение, но я исправил это, добавив alias vi="vim" в свой rc-файл оболочки

У меня такая же проблема с @ when77, когда я использую запятую git commit --amend .

@kyriejoshua

попробуйте предложение @Joshua-Chang, оно работает для меня.

попробуйте предложение @Joshua-Chang, оно работает для меня.

Я пытался.
Это работает, когда я использую vim напрямую, но это все равно неправильно, когда я запускаю команду git commit --amend или пытаюсь исправить конфликты в командной строке.

Наконец, я решил эту проблему, прочитав эту статью. @ всякий раз77
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 Думаете поделиться решением?

Это мое решение. @josephtyler

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

и перезапустите оболочку, исправлено

Для пользователей YCM используйте

Мы отслеживаем аналогичную проблему с системой Vim здесь: https://github.com/Valloric/YouCompleteMe/issues/3271

Предупреждение о спойлере: я думаю, что это вещь Мохаве, а не YCM.

Для меня проблема начала появляться после того, как Mojave установил «критическое обновление» (например, я уже много лет пользуюсь Mojave, и vim / powerline работают нормально). Оказывается, это был просто случай использования неправильного vim (например, /usr/bin/vim , встроенный vim Apple), а не моего vim из /usr/local/bin/vim . Это был просто случай починки моего PATH ; обновление предположительно изменило его порядок.

Я только начал использовать Mac с новой установкой Mojave и столкнулся с этой проблемой, следует отметить, что я использую python3.7.

Я решил это, выполнив следующие действия:

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

Просто замените VIM_VERSION версией vim, установленной в первой строке.

Могу добавить еще одно подтверждение, что это связано с обновлением macOS Mojave. Мне нужно будет провести некоторую сравнительную работу с другой машиной, которая еще НЕ была обновлена, чтобы увидеть, какие системные библиотеки изменились. Я уверен, что это что-то изменилось в установке python 2.7 (.10) по умолчанию или что-то в соответствующей библиотеке.

Если бы эта же проблема возникала из bash в zsh, то для меня ее исправило экспорт моего PATH . export PATH=$HOME/bin:/usr/local/bin:$PATH

У меня уже были python 3.7.3, vim (версия, включенная в macvim, скомпилированная [email protected]), и уже был Mojave. Делал только переход на zsh.

Итак, я бьюсь головой о стену, пытаясь понять, почему это не работает для меня на следующий день после того, как я был вынужден обновить свой рабочий ноутбук до Mojave. Я последовал приведенным выше руководствам и снова получил powerline, работающий в vim, но для моей ЖИЗНИ это не сработает правильно, когда я попытаюсь git commit .

Я дважды проверил в своем .zshrc что мой редактор установлен на vim . Я тогда alias vi=vim , а кости все равно нет.

Затем, переустановив powerline и vim около сотни раз, я заметил это в сообщении об ошибке (это было гораздо меньшее сообщение об ошибке после повторного перезапуска окна терминала и НЕ запуска tmux или чего-либо еще:

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.

Прямо там: /usr/bin/vim

Я дважды проверил, и в моем .gitconfig были следующие строки:

[core]
editor = /usr/bin/vim

Так что это было изменено на editor = vim

TL; DR : если у вас все еще есть проблемы с установкой git commit vim, дважды проверьте, что ваш .gitconfig не указывает на системный vim.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги