Vim компилируется с неправильной версией python (и не работает с необходимой версией)
Вкратце:
У меня проблема с компиляцией vim с предпочтительной версией python.
Когда я использую --enable-pythoninterp
, он компилируется с версией python на системной OSX.
Когда я использую --enable-pythoninterp=dynamic
, я получаю сообщение об ошибке в vim при попытке :py import sys
Вот что я делал более подробно:
% git clone https://github.com/b4winckler/macvim.git
% cd macvim
% ./configure --enable-pythoninterp \
--with-python-config-dir=/usr/local/lib/python2.7/config <- this option has no affects on result
...
checking for python... /usr/local/bin/python
checking Python version... 2.7
checking Python is 1.4 or better... yep
checking Python install prefix... /usr/local
checking Python execution prefix... /usr/local
checking Python configuration directory... /usr/local/lib/python2.7/config
...
% make
...
** BUILD SUCCEEDED **
% open src/MacVim/build/Release/MacVim.app
В открывшемся MacVim я введите:
:py import sys; print (sys.version, sys.executable)
('2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)]',
'/usr/bin/python')
Почему 2.6.1
?
Почему /usr/bin/python
?
Мой питон по умолчанию - 2,7! И он живет в /usr/local/bin/python
Я искал решение весь день. И я нашел его. Это = динамический атрибут (но это решение не объясняло).
После этого я попытался перекомпилировать vim с динамическим python:
% ./configure --enable-pythoninterp=dynamic
... output the same ...
% make
% open src/MacVim/build/Release/MacVim.app
В открывшемся MacVim:
:py import sys
И возникает ошибка:
E370: Could not load library libpython2.7.a
E263: Sorry, this command is disabled, the Python library could not be loaded.
Моя версия OSX - 10.6.8.
Версия python по умолчанию - 2,7.
% which python
/usr/local/bin/python
Может ли кто-нибудь объяснить, как python интегрируется в vim во время компиляции?
И как исправить ошибку с помощью libpython2.7.a?
update: у меня больше нет среды, описанной в вопросе. Поэтому я не смог проверить новые ответы. Но оставшаяся часть человечества по достоинству оценят вашу помощь.
Ответы
Ответ 1
У меня была та же проблема. Я скомпилировал Macvim из источника и попытался использовать версию python версии 2.7 из macports в:
/opt/local/bin/python
Некоторые модули не найдены, например, os-модуль. Причиной этого было то, что переменная PYTHONPATH внутри macvim неверна!
Чтобы проверить, откройте macvim и введите:
:python print sys.path
У меня есть следующие пути (обратите внимание на окончание, это абсурд):
...
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.5/'
...
Я предполагаю, что причина в флагом компоновщика "-framework Python". Это подхватывает неправильную, то есть систему python framework. Если я изменил строку в src/auto/configure
script на:
if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
vi_cv_path_python_plibs="-framework Python"
к
if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
vi_cv_path_python_plibs="-F/opt/local/Library/Frameworks -framework Python"
Запуск configure снова, после очистки,
Macvim компилируется и работает должным образом. Флаг -F сообщает компоновщику, в котором каталог находит следующую структуру. Macports устанавливает Python.framework в этом каталоге, YMMV.
Ответ 2
У меня была такая же проблема, как и вы (попытка скомпилировать MacVim с Python 2.7), и мне наконец удалось это сделать.
Сначала параметр dynamic
не работает! Я тоже видел этот совет в сети, но если вы посмотрите на конфигурацию script (или просто на помощь), она не будет распознана. Поэтому не использовать его. Это эквивалентно отключению python, которые объясняют, почему: py не работает. Вы не скомпилировали MacVim с Python.
То, что я сделал в конце, было переустановить Python 2.7.2 с использованием официального установщика на веб-сайте Python .
Затем вы должны иметь config
в /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
.
Попробуйте снова выполнить компиляцию со следующими параметрами
% ./configure --enable-pythoninterp \
--with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/python2.7/config
Это дало мне ошибку в конце компиляции, но если я игнорирую ее и запускаю двоичный файл в любом случае, это работает. Эта проблема может быть специфична для моего компьютера (похоже, это связано с установкой значка).
Удачи.
Обратите внимание, что способ, которым мне удалось скомпилировать MacVim с Python 2.7 (это была моя цель), не обязательно способ скомпилировать его с моей версией Python во время выполнения.
Ответ 3
Убедитесь, что правильный "python" находится в вашем PATH, что может быть не так, если вы используете "sudo".
Существует возможность установить бинарный файл python для использования (если вы не можете изменить $PATH):
export vi_cv_path_python=/usr/local/bin/python
Но все же с enable-pythoninterp=dynamic
ему не удалось загрузить libpython2.7.a при запуске ": python import sys", говоря "E448: Не удалось загрузить библиотечную функцию _PyArg_Parse_SizeT".
Ответ 4
Мое решение состояло в том, чтобы удалить файл кеша конфигурации, который был создан из предыдущего построенного, где я использовал питон, который поставлялся с OSX.
Затем я установил новую версию python с homebrew и не смог получить .configure, чтобы взять новую версию python, хотя я обновил свою переменную PATH и какой python показал правильную версию python.
Удаление файла кэша и запуск configure снова решили мою проблему.
rm src/auto/config.cache
./configure --enable-pythoninterp
Может быть, это помогает кому-то.
Ответ 5
Похоже, что корень вашей проблемы кроется в том, что Python ищет неправильный каталог. Это должна быть первая часть, которую вы хотите исправить, прежде чем беспокоиться об интеграции в vim. Все компьютеры Mac поставляются с версией Python, уже установленной на их машине, в /usr/local/bin/python. Обычно к тому моменту, когда вы получаете машину, вы хотите установить более новую версию Python. Новая версия должна быть расположена:
% which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
Я не знаю, как вы установили Python для начала, но самым простым способом является easy_install или pip. Это хорошая ссылка. Если это не решит проблему вашего пути, вы должны посмотреть здесь. Надеюсь, это все, что вам нужно, и проблема с vim будет решена.
Ответ 6
Я нашел, что вышеупомянутый ответ опасен - вызвал фатальные ошибки при закрытии буферов в macvim.
Ответ, найденный здесь, намного более стабилен:
Vim не скомпилируется с python в OS X
Ответ 7
У меня просто было то же самое желание, и MacPorts выполнил его без дополнительного возижения:
$ port info macvim
MacVim @7.3.snapshot66, Revision 2 (editors)
Variants: big, cscope, [+]huge, perl, python, python25, python26, python27, python31, python32, python33, ruby, ruby19, tcl, universal, xim
...
$ sudo port install macvim +python27
---> Computing dependencies for MacVim
---> Fetching archive for MacVim
---> Attempting to fetch MacVim-7.3.snapshot66_2+huge+python27.darwin_10.x86_64.tbz2 from http://jog.id.packages.macports.org/macports/packages/MacVim
---> Attempting to fetch MacVim-7.3.snapshot66_2+huge+python27.darwin_10.x86_64.tbz2 from http://packages.macports.org/MacVim
---> Attempting to fetch MacVim-7.3.snapshot66_2+huge+python27.darwin_10.x86_64.tbz2 from http://mse.uk.packages.macports.org/sites/packages.macports.org/MacVim
---> Fetching distfiles for MacVim
---> Verifying checksum(s) for MacVim
---> Extracting MacVim
---> Applying patches to MacVim
---> Configuring MacVim
---> Building MacVim
---> Staging MacVim into destroot
---> Installing MacVim @7.3.snapshot66_2+huge+python27
---> Deactivating MacVim @7.3.snapshot66_2+huge
---> Cleaning MacVim
---> Activating MacVim @7.3.snapshot66_2+huge+python27
---> Cleaning MacVim
---> Updating database of binaries: 100.0%
---> Scanning binaries for linking errors: 100.0%
---> No broken files found.
Примечание. Как вы можете видеть выше (deactivating
), я сначала попробовал по умолчанию (предварительно скомпилированный) MacVim (т.е. sudo port install macvim
→ MacVim @7.3.snapshot66_2+huge
), и у него не было поддержки Python, скомпилированной в.
После добавления варианта +python27
запуск :py import sys; print (sys.version, sys.executable)
внутри недавно установленного MacVim теперь возвращает:
('2.7.3 (default, Oct 22 2012, 06:12:28) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]', '/Applications/MacPorts/MacVim.app/Contents/MacOS/Vim')
который оказался таким же, как у меня в моей оболочке (в зависимости от ваших $PATH
и port select python
):
$ which python
/opt/local/bin/python
$ python
Python 2.7.3 (default, Oct 22 2012, 06:12:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
...
Ответ 8
Исправление, которое я нашел для этой проблемы, связано с удалением источника и его повторной загрузкой. Я уверен, что hg имеет возможность просто удалять локальные изменения, но я не смог найти его в файле справки.
Я не использовал MacVim, но я подозреваю, что ваша проблема по той же причине.
Просматривая вывод конфигурации script, кажется, что он кэширует ранее установленную установку python и просто использует это.