vim编译错误的python版本(并没有使用所需的版本)

时间:2011-09-03 17:06:00

标签: python macos vim compilation

简而言之:

我在使用首选python版本编译vim时遇到问题 当我使用--enable-pythoninterp时,它会编译系统OSX python版本 当我使用--enable-pythoninterp=dynamic时,我在尝试:py import sys

时在vim中收到错误

以下是我正在做的更详细的内容:

% 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
我的默认python是2.7!它生活在/usr/local/bin/python

我整天都在寻找解决方案。我发现了它。它是=dynamic属性(但此解决方案没有解释)。

之后我尝试用动态python重新编译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修复错误?


更新:我不再拥有问题所描述的环境。所以我无法测试新的答案。但是,人类的剩余部分将非常感谢你的帮助。

8 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。我从源代码编译了 Macvim 并尝试使用macports中的python版本2.7:

/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框架。如果我更改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"

在make clean之后再次运行configure Macvim编译并按预期工作。 -F标志告诉链接器在哪个目录中找到以下框架。 Macports将Python.framework安装在此目录YMMV。

答案 1 :(得分:5)

我遇到了同样的问题(尝试使用Python 2.7编译MacVim),我终于成功了。

首先dynamic选项不起作用!我在网上也看到了提示,但如果你看一下配置脚本(或只是帮助),就无法识别。因此不要使用。这相当于禁用python,这解释了为什么:py不起作用。你还没有用Python编译MacVim。

我最后完成的是使用Python website上的官方安装程序重新安装Python 2.7.2。 然后,您应该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

这在编译结束时给了我一个错误,但如果我忽略它并启动二进制无论如何都有效。此问题可能特定于我的计算机(它似乎与图标安装有关)。 祝你好运。

请注意,我设法使用Python 2.7(这是我的目标)编译MacVim的方式不一定是使用我的Python运行时版本编译它的方式。

答案 2 :(得分:5)

确保$ PATH中有正确的“python”,使用“sudo”时可能不是这样。

有一个选项可以设置要使用的python二进制文件(如果你不能修改$ PATH):

export vi_cv_path_python=/usr/local/bin/python

但是,enable-pythoninterp=dynamic运行“:python import sys”时无法加载libpython2.7.a,说“E448:无法加载库函数_PyArg_Parse_SizeT”。

答案 3 :(得分:5)

我的解决方案是删除配置缓存文件,该文件是从我之前使用OSX附带的python构建的。

然后我安装了一个带有自制程序的新python版本,并且无法获取.configure来获取新的python版本,即使我更新了我的PATH变量以及哪个python显示了正确的python版本。

删除缓存文件并再次运行configure解决了我的问题。

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

也许对任何人都有帮助。

答案 4 :(得分:0)

听起来问题的根源在于Python正在寻找错误的目录。在担心集成到vim之前,这应该是你想要纠正的第一部分。所有Mac都附带了已安装在其计算机上的Python版本,位于/ usr / local / bin / python中。通常在您获得计算机时,您需要安装更新版本的Python。应该找到新版本:

% which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

我不知道你是如何安装Python的,但最简单的方法是easy_install或pip。这是good link。如果这不能解决您的路径问题,那么您应该see here。希望这就是你所需要的,vim的问题将得到解决。

答案 5 :(得分:0)

我发现上述答案很危险 - 在关闭macvim中的缓冲区时会导致致命错误。

这里找到的答案要稳定得多: Vim failing to compile with python on OS X

答案 6 :(得分:0)

我只是有完全相同的愿望,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 - &gt; MacVim @7.3.snapshot66_2+huge),它没有没有编译Python支持。

添加+python27变体后,在新安装的MacVim中运行:py import sys; print (sys.version, sys.executable)现在返回:

('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')

恰好与我在我的shell中相同(取决于您的$PATHport 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
...

答案 7 :(得分:0)

我发现此问题的修复程序涉及删除源并重新获取它。我确定hg有办法删除本地更改,但我无法在帮助文件中找到它。 我没有使用MacVim,但我怀疑你的问题是出于同样的原因。

查看配置脚本的输出,它似乎缓存了之前使用的python安装,并且只是使用它。