1

I am trying to get UltiSnips to work with gVim on my Windows 10 machine and for some reason I keep getting the error:

Error detected while processing function UltiSnips #TrackChange:
line    1:
E370: Could not load library C:\Users\isaac\AppData\Local\Programs\Python\python36.dll
Error detected while processing function UltiSnips #TrackChange:
line    1:
E263: Sorry, this command is disabled, the Python library could not be loaded.

My vimrc that I have setup is written up like so:

set pythonthreehome=C:\Users\isaac\AppData\Local\Programs\Python\Python36
set pythonthreedll=C:\Users\isaac\AppData\Local\Programs\Python\Python36\python36.dll
call plug#begin('C:\Users\isaac\Desktop\Vim\vimfiles\plugged')
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/syntastic'
call plug#end()

syntax on
" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.
if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction

set guifont=Consolas:h12
colorscheme morning

I have tried to troubleshoot the issue and it is unclear to me whether I should be putting quotes around the path variables, if they path should be written like in unix, if the backslashes are supposed to escaped, or if I shouldn't even be using set and I should alter the pythonthreehomeand pythonthreedll variables using this instead.

let &pythonthreehome='C:\Users\isaac\AppData\Local\Programs\Python\Python36'
let &pythonthreedll='python36.dll'

Any help would be much appreciated. Thanks!

3
  • I suspect that the installation platform of your Vim installation and on your Python 3.6 installation is not compatible. To determine the installation platform of Vim execute the Vim command: :version. To determine the installation platform of Python 3.6 run in a console C:\Users\isaac\AppData\local\Programs\Python\Python36\python.exe if it contains [MSC v.1916 64 bit (AMD64)] the installation platform is Amd64, if it contains [MSC v.1916 32 bit (Intel)] the installation platform is Win32. Aug 19, 2022 at 8:38
  • 1
    So I have both 64 bit python and 64 bit vim installed. My suspicion is that it's due to to python not being in the $PATH so I'll need to add it to the list Aug 19, 2022 at 13:19
  • Did the answer addressed your problem or do you need we enrich it. If the answer solve the problem maybe could you validate it using the green v button next to the arrow voting buttons. It allow the question to rest ;-) Jan 17, 2023 at 16:18

1 Answer 1

1

Problems

The problems could be:

Version Mismatch

Depending of the version of Vim it is link against different version of Python:

  • The standard Vim 8.1 and 8.2 is linked against Python 3.6
  • The standard Vim 9.0 is linked against Python 3.10
  • The Tux Project version of Vim tend to be compiled with the latest official version of Python available (i.e.: Python 3.10 in August 2022)

You can can determine the version used by your version of Vim by using the :version command. If the output contains:

  • -DDYNAMIC_PYTHON3_DLL=\"python36.dll\" Vim expects Python 3.10 to be installed
  • -DDYNAMIC_PYTHON3_DLL=\"python310.dll\" Vim expects Python 3.10 to be installed

Make sure you have the correct version installed.

Platform Mismatch

A mismatch between the target platform (Win32, amd64) of Vim and the target platform of the installed Python.

To determine the platform (Win32 or amd64) of Vim you can use the Vim command: :version.

  • If it return at line 2 a string like MS-Windows 32-bit the platform is Win32.
  • If it return at line 2 a string like MS-Windows 64-bit the platform is amd64.

To determine the platform (Win32 or amd64) of Python 3.6 / 3.10 you have to run the Python interpreter selected by Vim (&PythonThreeHome) or the first Python 3.6 / 3.10 in the %Path%:

  • If it contains: [MSC v.1916 32 bit (Intel)] the installation is Win32.
  • If it contains: [MSC v.1916 64 bit (AMD64)] the installation is amd64.

If you have installed a 32 bit version of Vim you must have a 32 bit version of Python 3.6 / 3.10 installed.

Remark: You can have both Python 3.6 / 3.10 for Win32 and amd64 on the same machine (just make sure you don't override your installation because the default path for both architecture are the same).

Dependencies

The Python36.dll or Python310.dll can't be loaded because of some Dll dependencies.

One way to make sure Vim has access to the dependencies (e.g.: vcruntime140.dll) is to have the folder containing Python36.dll / Python310.dll into the %path%.

Verification

To verify that Python 3 is correctly connected with Python you can use the following Vim command:

:python3 print(sys.version)
4
  • 1
    Ah, I think that’s what the fix was last time I did this. I’ll add python36.dll to my $PATH variable and see what happens Aug 19, 2022 at 11:39
  • Good, let me know if it solve your problem and maybe validate the solution if so. Aug 19, 2022 at 12:55
  • 1
    So, I didn't check what version of Python GVim was compiled for. Version 9.0 that I'm using was compiled for Python 3.10. Installing Python 3.10 and pointing the pythonthreehome and pyhtonthreedll variables there fixed the issue. Aug 20, 2022 at 5:55
  • Thanks for letting us know :-). I'll improve the answer accordingly. Aug 20, 2022 at 6:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.