Подтвердить что ты не робот

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: у меня больше нет среды, описанной в вопросе. Поэтому я не смог проверить новые ответы. Но оставшаяся часть человечества по достоинству оценят вашу помощь.

4b9b3361

Ответ 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 macvimMacVim @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 и просто использует это.