我在使用首选python版本编译vim时遇到问题
当我使用--enable-pythoninterp
时,它会编译系统OSX python版本
当我使用--enable-pythoninterp=dynamic
时,我在尝试: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
?
我的默认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修复错误?
更新:我不再拥有问题所描述的环境。所以我无法测试新的答案。但是,人类的剩余部分将非常感谢你的帮助。
答案 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中相同(取决于您的$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
...
答案 7 :(得分:0)
我发现此问题的修复程序涉及删除源并重新获取它。我确定hg有办法删除本地更改,但我无法在帮助文件中找到它。 我没有使用MacVim,但我怀疑你的问题是出于同样的原因。
查看配置脚本的输出,它似乎缓存了之前使用的python安装,并且只是使用它。