olu*_*man 25 python macos vim compilation
我有一个问题,用首选的python版本编译vim.
当我使用--enable-pythoninterp
它时编译系统OSX python版本.
当我使用时,--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
Run Code Online (Sandbox Code Playgroud)
在打开的MacVim I中输入:
: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')
Run Code Online (Sandbox Code Playgroud)
为什么2.6.1
?
为什么/usr/bin/python
?
我的默认python是2.7!它生活在/usr/local/bin/python
我整天都在寻找解决方案.我发现了它.它是=动态属性(但这个解决方案没有解释).
之后我尝试用动态python重新编译vim:
% ./configure --enable-pythoninterp=dynamic
... output the same ...
% make
% open src/MacVim/build/Release/MacVim.app
Run Code Online (Sandbox Code Playgroud)
在打开的MacVim中:
:py import sys
Run Code Online (Sandbox Code Playgroud)
这是一个错误:
E370: Could not load library libpython2.7.a
E263: Sorry, this command is disabled, the Python library could not be loaded.
Run Code Online (Sandbox Code Playgroud)
我的OSX版本是10.6.8.
默认的python版本是2.7.
% which python
/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)
谁能解释一下python在编译过程中如何集成到vim中?
以及如何使用libpython2.7.a修复错误?
更新:我不再拥有问题所描述的环境.所以我无法测试新的答案.但人类的剩余部分将非常感谢你的帮助.
我有同样的问题.我从源代码编译Macvim并尝试使用macports中的python版本2.7:
/opt/local/bin/python
Run Code Online (Sandbox Code Playgroud)
找不到一些模块,例如os模块.这样做的原因是,PYTHONPATH变量里面的MacVim是错误的!
要测试,请打开macvim并输入:
:python print sys.path
Run Code Online (Sandbox Code Playgroud)
我得到了以下路径(注意结尾,这是无稽之谈):
...
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.5/'
...
Run Code Online (Sandbox Code Playgroud)
我认为原因是在链接器标志"-framework Python"中.这样就搞错了,即系统 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"
Run Code Online (Sandbox Code Playgroud)
至
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"
Run Code Online (Sandbox Code Playgroud)
再次运行configure,在make clean之后,Macvim编译并按预期工作.-F标志告诉链接器在哪个目录中找到以下框架.Macports在这个目录YMMV中安装Python.framework.
我的解决方案是删除配置缓存文件,该文件是从我之前使用OSX附带的python构建的.
然后我用自制软件安装了一个新的python版本,并且无法获取.configure来获取新的python版本,即使我更新了我的PATH变量以及哪个python显示了正确的python版本.
删除缓存文件并再次运行configure解决了我的问题.
rm src/auto/config.cache
./configure --enable-pythoninterp
Run Code Online (Sandbox Code Playgroud)
也许它可以帮助任何人.
我遇到了同样的问题(尝试用Python 2.7编译MacVim),我终于成功了.
首先,该dynamic
选项不起作用!我在网上也看到了这个提示,但是如果你看一下配置脚本(或者只是帮助),它就无法识别.因此不要使用它.这相当于禁用python,这解释了为什么:py不起作用.你还没有用Python编译MacVim.
我最后完成的是使用Python 网站上的官方安装程序重新安装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
Run Code Online (Sandbox Code Playgroud)
这在编译结束时给了我一个错误,但如果我忽略它并启动二进制无论如何都有效.这个问题可能是我的电脑特有的(它似乎与图标安装有关).祝好运.
请注意,我设法使用Python 2.7(这是我的目标)编译MacVim的方式不一定是使用我的Python运行时版本编译它的方式.
确保在$ PATH中使用了正确的"python",使用"sudo"时可能不是这种情况.
有一个选项可以设置要使用的python二进制文件(如果你不能修改$ PATH):
export vi_cv_path_python=/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)
但是,当enable-pythoninterp=dynamic
它运行":python import sys"时无法加载libpython2.7.a,说"E448:无法加载库函数_PyArg_Parse_SizeT".
听起来问题的根源在于 Python 正在寻找错误的目录。在担心集成到 vim 之前,这应该是您首先要纠正的部分。所有 Mac 都已在其计算机上安装了 Python 版本,位于 /usr/local/bin/python 中。通常,当您拿到机器时,您希望安装更新版本的 Python。新版本应位于:
% which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
Run Code Online (Sandbox Code Playgroud)
我不知道你是如何安装Python的,但最简单的方法是easy_install或pip。这是一个很好的链接。如果这不能解决您的路径问题,那么您应该看到这里。希望这就是您所需要的,并且 vim 的问题将得到解决。