conda 环境中安装的包依赖了 pywin32 时,运行代码会出现“ImportError: DLL load failed while importing shell: The specified procedure could not be found.”异常。

例如:

Traceback (most recent call last):
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\ProgramData\Miniconda3\envs\dvc\Scripts\dvc.exe\__main__.py", line 7, in <module>
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\cli\__init__.py", line 216, in main
    if analytics.is_enabled():
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\analytics.py", line 50, in is_enabled
    Config(validate=False).get("core", {}).get("analytics", "true")
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 105, in __init__
    self.load(validate=validate, config=config)
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 151, in load
    conf = self.load_config_to_level()
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 285, in load_config_to_level
    if merge_level in self.files:
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\funcy\objects.py", line 28, in __get__
    res = instance.__dict__[self.fget.__name__] = self.fget(instance)
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 120, in files
    files = {
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 121, in <dictcomp>
    level: os.path.join(self.get_dir(level), self.CONFIG)
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\dvc\config.py", line 116, in get_dir
    return site_config_dir(cls.APPNAME, cls.APPAUTHOR)
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\appdirs.py", line 237, in site_config_dir
    path = site_data_dir(appname, appauthor)
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\appdirs.py", line 134, in site_data_dir
    path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA"))
  File "E:\ProgramData\Miniconda3\envs\dvc\lib\site-packages\appdirs.py", line 480, in _get_win_folder_with_pywin32
    from win32com.shell import shellcon, shell
ImportError: DLL load failed while importing shell: The specified procedure could not be found.

需要将 conda 环境目录下“Lib\site-packages\pywin32_system32\”下的所有 dll 文件复制到 “Library\bin\” 下。

查看 conda 环境目录路径可以通过 “conda info -e” 来看。不过需要在 base 环境下看,因为 info 命令会调用 pywin32 库,不在 base 环境下有可能会遇到出错。

发表回复

您的电子邮箱地址不会被公开。