Author eryksun
Recipients brett.cannon, eric.snow, eryksun, jkloth, ncoghlan, paul.moore, steve.dower, tim.golden, zach.ware
Date 2019-02-23.01:33:34
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1550885614.98.0.845022400699.issue36085@roundup.psfhosted.org>
In-reply-to
Content
> Proposal #1: CPython calls SetDefaultDllDirectories() [2] on startup 

SetDefaultDllDirectories() affects the entire process, so it would needlessly break the world -- especially for embedding applications and ctypes users that have relied on adding directories to PATH. When loading an extension module, we can simply replace LOAD_WITH_ALTERED_SEARCH_PATH in the LoadLibraryExW flags with LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR and LOAD_LIBRARY_SEARCH_DEFAULT_DIRS (application directory, System32 directory, and directories added via SetDllDirectoryW and AddDllDirectory). Writers of extension modules are constrained by our API. We'll simply mandate that PATH is no longer searched.

It's cumbersome to require packages to have to manually call AddDllDirectory before being able to import an extension module with dependencies. We could create a protocol to store relative paths as an embedded resource in the extension module, which would be similar to the RPATH/RUNPATH $ORIGIN field in POSIX. We'd first map the extension module as a data file via LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE. Load and resolve the relative paths, add them via AddDllDirectory. Call LoadLibraryExW with the above-mentioned flags. Then remove the directories via RemoveDllDirectory.
History
Date User Action Args
2019-02-23 01:33:35eryksunsetrecipients: + eryksun, brett.cannon, paul.moore, ncoghlan, tim.golden, jkloth, eric.snow, zach.ware, steve.dower
2019-02-23 01:33:34eryksunsetmessageid: <1550885614.98.0.845022400699.issue36085@roundup.psfhosted.org>
2019-02-23 01:33:34eryksunlinkissue36085 messages
2019-02-23 01:33:34eryksuncreate