Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

vim compiles with wrong python version (and not working with needed version)

Tags:

In brief:

I have a problem with compiling vim with preferred python version.
When I use --enable-pythoninterp it compiles with system OSX python version.
When I use --enable-pythoninterp=dynamic I get an error in vim while trying :py import sys

Here is what I was doing in more detail:

% 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 

In the opened MacVim I type:

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

Why 2.6.1?
Why /usr/bin/python?
My default python is 2.7! And it lives at /usr/local/bin/python

I was searching for solution all day. And I found it. It is =dynamic attribute (but this solution had not explanation).

After that I tried to recompile vim with dynamic python:

% ./configure --enable-pythoninterp=dynamic ... output the same ... % make % open src/MacVim/build/Release/MacVim.app 

In opened MacVim:

:py import sys 

And here comes an error:

E370: Could not load library libpython2.7.a E263: Sorry, this command is disabled, the Python library could not be loaded. 

My OSX version is 10.6.8.
Default python version is 2.7.

% which python /usr/local/bin/python 

Can anybody explain how python is integrating into vim during the compilation?
And how to fix the error with libpython2.7.a?


update: I no longer have the environment described at the question. So I couldn't test new answers. But remaining part of mankind will appreciate your help.

like image 652
oluckyman Avatar asked Sep 03 '11 17:09

oluckyman


People also ask

Can we change python version in CMD?

Yes, you should be able to switch between python versions. As a standard, it is recommended to use the python3 command or python3. 7 to select a specific version. The py.exe launcher will automatically select the most recent version of Python you've installed.


2 Answers

My solution was to delete the configure cache file which was created from a previous built where I used the python which came with OSX.

Then I installed a new python version with homebrew and couldn't get .configure to take the new python version, even though I updated my PATH variable and which python showed the right python version.

Deleting the cache file and running configure again solved my problem.

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

Maybe it helps anybody.

like image 88
mjspier Avatar answered Sep 23 '22 07:09

mjspier


I had the same problem. I compiled Macvim from source and tried to use the python version 2.7 from macports in:

/opt/local/bin/python 

Some modules were not found, for example the os module. The reason for this was that the PYTHONPATH variable inside macvim is wrong!

To test, open macvim and type:

:python print sys.path 

I got the following paths (note the ending, which is nonsense):

... /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.5/' ... 

I presume the reason is in the linker flag "-framework Python". This picks up the wrong, i.e. the system python framework. If I change the line in the src/auto/configure script from:

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" 

to

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" 

Running configure again, after make clean, Macvim compiles and works as expected. The -F flag tells the linker in which directory to find the following framework. Macports installs the Python.framework in this directory, YMMV.

like image 29
mrossi Avatar answered Sep 22 '22 07:09

mrossi