Commit fdbf1450 authored by atalman's avatar atalman Committed by Facebook GitHub Bot
Browse files

Torchaudio load libary path fix for windows python 3.8 (#2735)

Summary:
Torchaudio load libary path fix for windows and python = 3.8

Fixes: https://github.com/pytorch/audio/issues/2726

Fixes following issue:

```
>>> import torchaudio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\site-packages\torchaudio\__init__.py", line 1, in <module>
    from torchaudio import (  # noqa: F401
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\site-packages\torchaudio\_extension.py", line 128, in <module>
    _init_extension()
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\site-packages\torchaudio\_extension.py", line 98, in _init_extension
    _load_lib("libtorchaudio")
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\site-packages\torchaudio\_extension.py", line 52, in _load_lib
    torch.ops.load_library(path)
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\site-packages\torch\_ops.py", line 573, in load_library
    ctypes.CDLL(path)
  File "C:\Users\atalman\miniconda3\envs\mywin38\lib\ctypes\__init__.py", line 373, in __init__
    self._handle = _dlopen(self._name, mode)
FileNotFoundError: Could not find module 'C:\Users\atalman\miniconda3\envs\mywin38\Lib\site-packages\torchaudio\lib\libtorchaudio.pyd' (or one of its dependencies). Try using the full path with constructor syntax.
>>>
```

Caused by dlls not being found in the conda environment
```
C:\Users\atalman\miniconda3\envs\mywin38\bin\
```

While this environment is set correctly in PATH its ignored with Python = 3.8
Please refer to: https://stackoverflow.com/questions/59330863/cant-import-dll-module-in-python

Pull Request resolved: https://github.com/pytorch/audio/pull/2735

Reviewed By: carolineechen

Differential Revision: D40112293

Pulled By: carolineechen

fbshipit-source-id: c7fc9bb49fc3ec4a2855c6ea473f36808103ed1e
parent 856552a5
import os import os
import sys
import warnings import warnings
from pathlib import Path from pathlib import Path
...@@ -85,6 +86,18 @@ def _init_extension(): ...@@ -85,6 +86,18 @@ def _init_extension():
warnings.warn("torchaudio C++ extension is not available.") warnings.warn("torchaudio C++ extension is not available.")
return return
# On Windows Python-3.8+ has `os.add_dll_directory` call,
# which is called to configure dll search path.
# To find cuda related dlls we need to make sure the
# conda environment/bin path is configured Please take a look:
# https://stackoverflow.com/questions/59330863/cant-import-dll-module-in-python
if os.name == "nt" and sys.version_info >= (3, 8) and sys.version_info < (3, 9):
env_path = os.environ["PATH"]
path_arr = env_path.split(";")
for path in path_arr:
if os.path.exists(path):
os.add_dll_directory(path)
_load_lib("libtorchaudio") _load_lib("libtorchaudio")
# This import is for initializing the methods registered via PyBind11 # This import is for initializing the methods registered via PyBind11
# This has to happen after the base library is loaded # This has to happen after the base library is loaded
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment