Python plugin using PyWin32

558 views
Skip to first unread message

Alexandre Martani

unread,
Jun 30, 2011, 10:35:51 AM6/30/11
to v...@vim.org
Hello all,

I am trying to use Vim R plugin [1], which is a Python plugin that uses
PyWin32 on Windows. I have installed Python 2.7.1 and PyWin32. It is
installed correctly, as I am able to do a "import win32api" from python
shell without errors. But, on GVim, if I do:

:python import win32api

I receive the following error:

Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: DLL load failed: The specified module could not be found.

Notice that this is not the standard error for module not found ("No
module named x"). It is probably related to the path python uses for its
DLL modules. I have played with sys.path, but without success.

I also noticed the first path in sys.path is "C:\\must>not&exist", which
is probably a bug. Don't know if this could be related, but I tried do a
sys.path.pop(0), and it didn't work.

Anyone has an idea of the problem?

Thanks

[1] - http://www.vim.org/scripts/script.php?script_id=2628
--
*Alexandre Martani* | GDX Investimentos

<mailto:alexandr...@gdx.com.br>

sc

unread,
Jun 30, 2011, 7:03:51 PM6/30/11
to vim...@googlegroups.com
On Thursday, June 30, 2011 09:35:51 Alexandre Martani wrote:

> Hello all,

> I am trying to use Vim R plugin [1], which is a Python plugin
> that uses PyWin32 on Windows. I have installed Python 2.7.1
> and PyWin32. It is installed correctly, as I am able to do a
> "import win32api" from python

> shell without errors. But, on GVim, if I do:
> :python import win32api

> I receive the following error:

> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> ImportError: DLL load failed: The specified module could not
> be found.

> Notice that this is not the standard error for module not
> found ("No module named x"). It is probably related to the
> path python uses for its DLL modules. I have played with
> sys.path, but without success.

> I also noticed the first path in sys.path is
> "C:\\must>not&exist", which is probably a bug. Don't know if
> this could be related, but I tried do a sys.path.pop(0), and
> it didn't work.

> Anyone has an idea of the problem?

just guessing here, but python 2.7.1 is fairly new -- there's
a good chance your vim was compiled with 2.6 and can't find
the 2.6 dll

John Beckett

unread,
Jul 1, 2011, 4:01:48 AM7/1/11
to vim...@googlegroups.com
Alexandre Martani wrote:
> :python import win32api
>
> I receive the following error:
>
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> ImportError: DLL load failed: The specified module could not be found.

I think sc is correct. In Vim, use :version and carefully
inspect what it says about the Python support which was
configured when your Vim was compiled.

John

Alexandre Martani

unread,
Jul 1, 2011, 2:11:44 PM7/1/11
to v...@vim.org
It was compiled with Python 2.7:

Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32
-DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DFEAT_XPM_W32 -DWINVER=0x0400
-D_WIN32_WINNT=0x0400 /Fo.\ObjGOLYHTR/ /Ox /GL -DNDEBUG /Zl /MT
-DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_W32 -DDYNAMIC_ICONV
-DDYNAMIC_GETTEXT -DFEAT_TCL -DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL=\"tcl83.dll\" -DDYNAMIC_TCL_VER=\"8.3\" -DFEAT_PYTHON
-DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DFEAT_PYTHON3
-DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python31.dll\" -DFEAT_PERL
-DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl512.dll\" -DFEAT_RUBY
-DDYNAMIC_RUBY -DDYNAMIC_RUBY_VER=191
-DDYNAMIC_RUBY_DLL=\"msvcrt-ruby191.dll\" -DFEAT_BIG /Fd.\ObjGOLYHTR/ /Zi

Besides, it is finding Python DLL, since the problem only occour when
importing win32api, but I can use other python modules without problem.

Alexandre

On Jul 1, 5:01 am, "John Beckett" <johnb.beck...@gmail.com> wrote:


> Alexandre Martani wrote:
> > :python import win32api
>
> > I receive the following error:
>
> > Traceback (most recent call last):
> > File "<string>", line 1, in <module>
> > ImportError: DLL load failed: The specified module could not be found.
>

Roland Puntaier

unread,
Jul 2, 2011, 5:45:22 AM7/2/11
to vim...@googlegroups.com
On 06/30/2011 04:35 PM, Alexandre Martani wrote:
> I am trying to use Vim R plugin [1], which is a Python plugin that
> uses PyWin32 on Windows. I have installed Python 2.7.1 and PyWin32. It
> is installed correctly, as I am able to do a "import win32api" from
> python shell without errors. But, on GVim, if I do:
>
> :python import win32api
>
> I receive the following error:
>
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> ImportError: DLL load failed: The specified module could not be found.

Is the directory where the Win32API DLLs are in the Windows environment
variable PATH?
If not, please try to add it there and restart VIM. Do the same also for
the R DLLs.
By the way: I wasn't aware of this VIM R plugin. I like R-Project and
VIM. So this is a good fit.

Regards, Roland

Alexandre Martani

unread,
Jul 4, 2011, 1:47:34 PM7/4/11
to vim...@googlegroups.com

The module works when used directly from the Python shell (only fails
from Gvim). I have checked os.environ["PATH"] from both instances, and
they are basically equal (they both includes "C:\Python2.7"), so I think
this is not the problem. Is there any other paths Windows uses to search
its DLLs?

Alexandre

Roland Puntaier

unread,
Jul 5, 2011, 10:49:30 AM7/5/11
to vim...@googlegroups.com

Alexandre Martani

unread,
Jul 6, 2011, 10:35:48 AM7/6/11
to vim...@googlegroups.com

I tried to add a lot of paths, but I am still getting this error.

:python print "\n".join(os.environ["PATH"].split(";"))

C:\Python27\
C:\Python27\Scripts
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\system32\WindowsPowerShell\v1.0
C:\Python27
C:\Program Files\TortoiseSVN\bin
%APPDATA%\Python\Scripts
C:\Program Files\Vim\vim73
C:\Python27\Lib\site-packages\win32
C:\Python27\Lib\site-packages\win32\lib
C:\Python27\Lib\site-packages\pywin32_system32

C:\Python27\Lib\site-packages\win32
C:\Python27\Lib\site-packages

Any other idea of paths which could be missing?

Vlad Irnov

unread,
Jul 6, 2011, 6:35:21 PM7/6/11
to vim_use


On Jun 30, 10:35 am, Alexandre Martani <alexandre.mart...@gdx.com.br>
wrote:
> Hello all,
>
> I am trying to use Vim R plugin [1], which is a Python plugin that uses
> PyWin32 on Windows. I have installed Python 2.7.1 and PyWin32. It is
> installed correctly, as I am able to do a "import win32api" from python
> shell without errors. But, on GVim, if I do:
>
> :python import win32api
>
> I receive the following error:
>
> Traceback (most recent call last):
>      File "<string>", line 1, in <module>
> ImportError: DLL load failed: The specified module could not be found.
>
> Notice that this is not the standard error for module not found ("No
> module named x"). It is probably related to the path python uses for its
> DLL modules. I have played with sys.path, but without success.

I cannot reproduce your problem on my system:
Win2k; Vim 7.3.145; Python 2.6.5; pywin32-214.win32-py2.6.exe
installed
My PATH has Python's top level directory "C:\Python" where it's
installed and no subdirs or other Python-related stuff.

Some ideas:

1) Try after launching Vim with
"C:\Program Files\Vim\vim73\gvim.exe" -u NONE -U NONE

2) Examine sys.path from Vim
:py import sys; print sys.path
I have these
'C:\\Python\\lib\\site-packages'
'C:\\Python\\lib\\site-packages\\win32'
'C:\\Python\\lib\\site-packages\\win32\\lib'
'C:\\Python\\lib\\site-packages\\Pythonwin'

3) Perhaps you have several conflicting versions of Python or PyWin32
installed? 32- vs 64-bit?

4) Did you install PyWin as Admin? If not, try to reinstall.


> I also noticed the first path in sys.path is "C:\\must>not&exist", which
> is probably a bug. Don't know if this could be related, but I tried do a
> sys.path.pop(0), and it didn't work.

It used to be an empty string. It was changed to this bogus path for
some security reasons:
http://ftp.nluug.nl/vim/patches/7.2/7.2.045

Alexandre Martani

unread,
Jul 7, 2011, 4:40:15 PM7/7/11
to vim...@googlegroups.com

Same problem.

> 2) Examine sys.path from Vim
> :py import sys; print sys.path
> I have these
> 'C:\\Python\\lib\\site-packages'
> 'C:\\Python\\lib\\site-packages\\win32'
> 'C:\\Python\\lib\\site-packages\\win32\\lib'
> 'C:\\Python\\lib\\site-packages\\Pythonwin'
>
> 3) Perhaps you have several conflicting versions of Python or PyWin32
> installed? 32- vs 64-bit?
>
> 4) Did you install PyWin as Admin? If not, try to reinstall.

I have removed all versions of Python and removed folders C:/Python2.7.
I also tried to use ActivePython, as in my experiences it fixes some
problems with windows paths, but none of them worked. Someone using
Python 2.7 there? I can try later to install Python 2.6.

>> I also noticed the first path in sys.pat
h is "C:\\must>not&exist", which
>> is probably a bug. Don't know if this could be related, but I tried do a
>> sys.path.pop(0), and it didn't work.
>
> It used to be an empty string. It was changed to this bogus path for
> some security reasons:
> http://ftp.nluug.nl/vim/patches/7.2/7.2.045

It was changed, but I suppose from the path that it should have been
removed later:

+ /* Remove the element from sys.path that was added because of our
+ * argv[0] value in PythonMod_Init(). Previously we used an empty
+ * string, but dependinding on the OS we then get an empty entry or
+ * the current directory in sys.path. */
+ PyRun_SimpleString("import sys; sys.path = filter(lambda x: x !=
'/must>not&exist', sys.path)");

I think it is not being removed because Python on Windows changes it to
'C:\\must>not&exist'.


Vlad Irnov

unread,
Jul 7, 2011, 10:50:54 PM7/7/11
to vim_use


On Jul 7, 4:40 pm, Alexandre Martani <alexandre.mart...@gdx.com.br>
wrote:
> On Wednesday, July 06, 2011 7:35:21 PM, Vlad Irnov wrote:
> > On Jun 30, 10:35 am, Alexandre Martani<alexandre.mart...@gdx.com.br>
> > wrote:
> >> Hello all,
>
> >> I am trying to use Vim R plugin [1], which is a Python plugin that uses
> >> PyWin32 on Windows. I have installed Python 2.7.1 and PyWin32. It is
> >> installed correctly, as I am able to do a "import win32api" from python
> >> shell without errors. But, on GVim, if I do:
>
> >> :python import win32api
>
> >> I receive the following error:
>
> >> Traceback (most recent call last):
> >>       File "<string>", line 1, in<module>
> >> ImportError: DLL load failed: The specified module could not be found.
>
> >> Notice that this is not the standard error for module not found ("No
> >> module named x"). It is probably related to the path python uses for its
> >> DLL modules. I have played with sys.path, but without success.
>
> > I cannot reproduce your problem on my system:
> > Win2k; Vim 7.3.145; Python 2.6.5; pywin32-214.win32-py2.6.exe
> > inst
> alled
> > My PATH has Python's top level directory "C:\Python" where it's
> > installed and no subdirs or other Python-related stuff.

I should mention that I installed Vim from sources. I compiled
gvim.exe and vim.exe with MinGW (GCC), with Python 2.6 support only,
no Python 3. In contrast, your version output shows your Vim was
probably built with Microsoft VC toolkit (or whatever it is called).
It is possible that it does not play nice with PyWin32. It also has
support for both Python 2.7 and 3.1. May be these two clash somehow.

I suggest you compile your own gvim.exe and/or vim.exe as per my
instructions:
http://vim.wikia.com/wiki/Build_Python-enabled_Vim_on_Windows_with_MinGW?useskin=monobook

If that helps, then it's a Vim bug.
You can also try to find a differently built version of Vim but you
have to make sure it supports Python 2.7. The Cream version needs
Python 2.6.



> >> I also noticed the first path in sys.pat
>
> h is "C:\\must>not&exist", which
>
> >> is probably a bug. Don't know if this could be related, but I tried do a
> >> sys.path.pop(0), and it didn't work.
>
> > It used to be an empty string. It was changed to this bogus path for
> > some security reasons:
> >http://ftp.nluug.nl/vim/patches/7.2/7.2.045
>
> It was changed, but I suppose from the path that it should have been
> removed later:
>
> +       /* Remove the element from sys.path that was added because of our
> +        * argv[0] value in PythonMod_Init().  Previously we used an empty
> +        * string, but dependinding on the OS we then get an empty entry or
> +        * the current directory in sys.path. */
> +       PyRun_SimpleString("import sys; sys.path = filter(lambda x: x !=
> '/must>not&exist', sys.path)");
>
> I think it is not being removed because Python on Windows changes it to
> 'C:\\must>not&exist'.

You are probably right that it should be removed. It's not going to
cause any problems though. Such nonexistent directories are ignored.
Reply all
Reply to author
Forward
0 new messages