New submission from Simon Munday <smun...@qti.qualcomm.com>:

If I attempt to import an extension module via something like this:

from pkg import extmodule

and it happens that "pkg" is found in a folder that is given in sys.path as a 
relative path, then the import fails, with 

ImportError: DLL load failed while importing extmodule: The parameter is 
incorrect.

This only happens with 3.8 and later.  

AFAICS the reason is that if the module resolution is done via a relative path, 
it results in dynload_win.c:_PyImport_FindSharedFuncptrWindows attempting to 
feed LoadLibraryExW a relative path for the .pyd file.   But LoadLibraryExW 
treats relative paths completely differently from absolute ones, in that it 
searches for the given path relative to the library search path entries rather 
than simply loading the DLL at that path.  But as of 3.8 the current directory 
is removed from the search path, so the .pyd is never found.  Since Python 
knows the specific file it wants LoadLibraryExW to load, having just resolved 
it via the import mechanism, I guess it ought to ensure it only ever calls 
LoadLibraryExW with an absolute path.  

(I'm assuming use of relative paths in sys.path is officially supported, since 
nothing I've found in the docs says otherwise.)

----------
components: Extension Modules
messages: 386155
nosy: smunday
priority: normal
severity: normal
status: open
title: Can't import extension modules resolved via relative paths in sys.path 
on Windows don't don't
type: behavior
versions: Python 3.10, Python 3.8, Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43105>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to