vim компилирует с неверной версией Python (и не работает с нужной версией) - PullRequest
24 голосов
/ 03 сентября 2011

Вкратце:

У меня проблема с компиляцией 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's install prefix... /usr/local
checking Python's execution prefix... /usr/local
checking Python's 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

Я искал решение весь день. И я нашел это. Это атрибут = dynamic (но это решение не имело объяснения).

После этого я попытался перекомпилировать vim с динамическим питоном:

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

Ответы [ 8 ]

7 голосов
/ 05 марта 2012

У меня была такая же проблема.Я скомпилировал 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".Это обнаруживает неправильное, то есть system python Framework.Если я изменю строку в скрипте src/auto/configure с:

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, после make clean Macvim скомпилируется и будет работать как положено.Флаг -F сообщает компоновщику, в каком каталоге найти следующую структуру.Macports устанавливает Python.framework в этот каталог, YMMV.

5 голосов
/ 10 октября 2013

Мое решение состояло в том, чтобы удалить файл кэша конфигурации, который был создан из предыдущей сборки, где я использовал python, поставляемый с OSX.

Затем я установил новую версию Python с помощью homebrew и не смог получить .configure, чтобы взять новую версию Python, даже если я обновил переменную PATH и какой python показал правильную версию Python.

Удаление файла кеша и запуск конфигурации снова решили мою проблему.

rm src/auto/config.cache
./configure --enable-pythoninterp

Может быть, это кому-нибудь поможет.

5 голосов
/ 08 марта 2013

Убедитесь, что в вашем $ PATH указан правильный «python», что может быть не так при использовании «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».

5 голосов
/ 05 октября 2011

У меня была такая же проблема, как у вас (пытался скомпилировать MacVim с Python 2.7), и мне наконец удалось это сделать.

Сначала опция dynamic не работает !Я видел, что tip тоже в сети, но если вы посмотрите на скрипт настройки (или просто помощь), он не распознается.Поэтому не используйте его .Это эквивалентно отключению Python, который объясняет, почему: py не работает.Вы не скомпилировали MacVim с Python.

В конце я сделал переустановку Python 2.7.2 с помощью официального установщика на сайте Python .После этого вы должны иметь config in /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

Это дало мне ошибку в конце компиляции, но еслиЯ игнорирую это и запускаю бинарный файл в любом случае, который работает.Эта проблема может быть связана с моим компьютером (похоже, она связана с установкой icon ).Удачи.

Обратите внимание, что таким образом мне удалось скомпилировать MacVim с помощью Python 2.7 (что и было моей целью), а не обязательно способом скомпилировать его с моей рабочей версией Python.

0 голосов
/ 26 августа 2014

Исправление, которое я нашел для этой проблемы, заключалось в удалении источника и повторном запросе его.Я уверен, что у hg есть способ просто удалить локальные изменения, но я не смог найти его в файле справки.Я не использовал MacVim, но подозреваю, что ваша проблема по той же причине.

Просматривая выходные данные скрипта конфигурации, вы обнаруживаете, что он кэширует установку Python, которую он использовал ранее, и просто использует ее.

0 голосов
/ 26 февраля 2013

У меня было точно такое же желание, и 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
...
0 голосов
/ 23 июня 2012

Я обнаружил, что приведенный выше ответ опасен - вызвал фатальные ошибки при закрытии буферов в macvim.

Ответ, найденный здесь, гораздо более стабилен: Vim не может скомпилировать с python на OS X

0 голосов
/ 19 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...