Skip to content

Installing maturin_import_hook causes the binary file from pip to fail on Windows. #21

@wangzhen0518

Description

@wangzhen0518

Bug Description

After installing maturin_import_hook, I failed to execute binary file installed from pip, e.g.,

> python -m maturin_import_hook site install
> pip
Could not import runpy module
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1138, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1078, in _find_spec
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 143, in find_spec
    project_dir, is_editable = _load_dist_info(search_path, package_name)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 407, in _load_dist_info      
    dist_info_path = _find_dist_info_path(path, package_name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 395, in _find_dist_info_path 
    names = os.listdir(directory)
            ^^^^^^^^^^^^^^^^^^^^^
NotADirectoryError: [WinError 267] 目录名称无效。: 'C:\\Users\\Admin\\wangzhen\\project\\LearnRustPython\\rs4py\\.venv\\Scripts\\pip.exe'
> pipx
Could not import runpy module
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1138, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1078, in _find_spec
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 143, in find_spec
    project_dir, is_editable = _load_dist_info(search_path, package_name)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 407, in _load_dist_info      
    dist_info_path = _find_dist_info_path(path, package_name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 395, in _find_dist_info_path 
    names = os.listdir(directory)
            ^^^^^^^^^^^^^^^^^^^^^
NotADirectoryError: [WinError 267] 目录名称无效。: 'C:\\Users\\Admin\\wangzhen\\project\\LearnRustPython\\rs4py\\.venv\\Scripts\\pipx.exe'

Other binary files, such as ipython, also fail.

I have found how to fix it. Just add a exception type when dealing exception in _find_dist_info_path, i.e., change

def _find_dist_info_path(directory: Path, package_name: str) -> Optional[Path]:
try:
names = os.listdir(directory)
except FileNotFoundError:
return None

to

def _find_dist_info_path(directory: Path, package_name: str) -> Optional[Path]:
    try:
        names = os.listdir(directory)
    except (FileNotFoundError, NotADirectoryError):
        return None

Shall I make a pr to fix it?

Steps to Reproduce

> uv venv --python 3.11
> uv pip install maturin_import_hook maturin pip pipx
> pip
Could not import runpy module
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1138, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1078, in _find_spec
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 143, in find_spec
    project_dir, is_editable = _load_dist_info(search_path, package_name)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 407, in _load_dist_info      
    dist_info_path = _find_dist_info_path(path, package_name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 395, in _find_dist_info_path 
    names = os.listdir(directory)
            ^^^^^^^^^^^^^^^^^^^^^
NotADirectoryError: [WinError 267] 目录名称无效。: 'C:\\Users\\Admin\\wangzhen\\project\\LearnRustPython\\rs4py\\.venv\\Scripts\\pip.exe'
> pipx
Could not import runpy module
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1138, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1078, in _find_spec
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 143, in find_spec
    project_dir, is_editable = _load_dist_info(search_path, package_name)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 407, in _load_dist_info      
    dist_info_path = _find_dist_info_path(path, package_name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Admin\wangzhen\project\LearnRustPython\rs4py\.venv\Lib\site-packages\maturin_import_hook\project_importer.py", line 395, in _find_dist_info_path 
    names = os.listdir(directory)
            ^^^^^^^^^^^^^^^^^^^^^
NotADirectoryError: [WinError 267] 目录名称无效。: 'C:\\Users\\Admin\\wangzhen\\project\\LearnRustPython\\rs4py\\.venv\\Scripts\\pipx.exe'

Please provide the output of python -m maturin_import_hook version (or provide manually)

OS: Windows-10-10.0.26100-SP0
Python: CPython 3.11.12
maturin-import-hook: 0.2.0
maturin: maturin 1.8.6
rustc: rustc 1.86.0 (05f9846f8 2025-03-31)
pip: 25.1.1

Does maturin develop work when run manually for your project?

  • Yes/No (leave blank if not applicable)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions