Skip to content

DLL load error while importing scipy.sparse.linalg module on Windows #11062

@terem42

Description

@terem42

My bug report is about DLL load error on running scipy-1.3.2 library for Windows 10 64bit

Reproducing code example:

import scipy.sparse.linalg
print("loaded")

After small research I've identified a culput, there is no PATH env setup for windows platform inside __config__.py of scipy package, or it's not get executed correctly.

if sys.platform == 'win32' and os.path.isdir(extra_dll_dir):
    os.environ.setdefault('PATH', '')
    os.environ['PATH'] += os.pathsep + extra_dll_dir

Henceforth, the path to .libs folder is not added to Windows path and libraries never ever gets found.

Error message:

Traceback (most recent call last):
  File "test_lib.py", line 1, in <module>
    import scipy.sparse.linalg
  File "C:\apps\Python37\lib\site-packages\scipy\sparse\linalg\__init__.py", line 113, in <module>
    from .isolve import *
  File "C:\apps\Python37\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
    from .iterative import *
  File "C:\apps\Python37\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 10, in <module>
    from . import _iterative
ImportError: DLL load failed

Scipy/Numpy/Python version information:

Python 3.7.5 win64
scipy-1.3.2
numpy-1.17.4

Temporary workaround I'm using for the moment being, is a small update within __init__.py repeating the missing search path addition.

import os
import sys

extra_dll_dir = os.path.join(os.path.dirname(__file__), '.libs')
if sys.platform == 'win32' and os.path.isdir(extra_dll_dir):  
  os.environ['PATH'] = extra_dll_dir + os.pathsep + os.environ['PATH']

Metadata

Metadata

Assignees

No one assigned

    Labels

    Official binariesItems related to the official SciPy binaries, including wheels and vendored libs

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions