导入_ctypes时出现ImportError:找不到指定的模块。

11

错误信息: ImportError: DLL加载失败,导入_ctypes时出错:指定的模块无法找到

需求: 如何解决此错误?并在特定环境启动jupyter notebook和使用pip? 其他环境可以正常使用。

尝试在虚拟环境中启动jupyter notebook或使用pip时, 我无法在“Myenvproject”环境中启动jupyter。但是base环境可以正常启动。

我尝试了 conda uninstall pyzmq 并重新在“Myenvproject”环境中安装jupyter, 但仍无法启动。 Jupyter无法启动

后来发现当我检查 pip --version 时也出现了同样的错误。 无法使用pip

操作系统为Windows 10
Python版本为3.10.0(Anaconda虚拟环境)


3
请将错误信息作为文本发布,而不是作为图像。 - toyota Supra
2
请澄清您的具体问题或提供额外的细节,以准确突出您所需的内容。目前的描述不够清晰,很难确定您在询问什么。 - Community
1
@toyotaSupra 我把错误信息以文本形式发布了。 - Droom drum
在控制台中输入dir "C:\Users\shing\anaconda3\DLLs\_ctypes.pyd",会输出什么?另外一个环境也是Python 3.10.0吗? - CristiFati
你正在运行的命令列表是什么,它来自哪里? - CristiFati
显示剩余3条评论
5个回答

5

1. 简介

我最近注意到这个问题(或者非常相似/重复的问题)出现了几次,但是没有一个提供了一个清晰的路径来持续遇到这个问题(环境创建,为了达到这种状态而运行的命令)。考虑到这个问题被查看的频率,我们只能得出这是一个相当常见的问题。
我将发布一些指南,以防止用户遇到这个问题,并且还会提供一些调查技巧,让用户知道如何解决一旦遇到。

注:

  • 我没能遇到这个问题 - 除非故意搞乱环境

  • 错误与_ctypes.pyd有关,但原则适用于任何其他.pyd(.dll)

  • 虽然我正在Windows上进行调查,但这些概念也适用于Unix系统

  • 我正在使用(截至回答日期,不断升级自旧版本的)Anaconda:

    • Navigator 2.4.2

    • Conda 23.5.2

    • Python 3.9.17(基本环境)

2. CTypes注意事项

[Python.Docs]: ctypes - 用于 Python 的外部函数库 是一个库(最初由 Thomas Heller 开始,然后被 Python 的标准库很久以前采纳),旨在与其他(较低级别)语言编写的 .dll.so)文件进行交互和调用函数。
互联网上有很多示例,甚至在这里也有一些我要举例的。

CTypes在底层使用LibFFI[GitHub]: libffi/libffi - 一个可移植的外部函数接口库 - 主要用C和ASM编写)。

它由两部分组成:
  1. 核心:使用 C(使用 LibFFI)编写。位于 [GitHub]: pytgon/cpython - (main) cpython/Modules/_ctypes。这是执行所有魔术的扩展模块[Python.Docs]: 使用C或C++扩展Python)。在Win上,它是一个名为_ctypes.pyd.dll 文件(这是我将要引用它的方式),在Nix上,则是_ctypes*.so文件(请查看[Python.PEPs]: PEP 3149 - 带有ABI版本标记的 .so 文件以获取更多命名约定细节)。

  2. Python 包装器。位于 [GitHub]: pytgon/cpython - (main) cpython/Lib/ctypes。提供对核心的友好访问。

_ctypes.pydLibFFI的依赖在不同的操作系统Python发行版/版本上有很大的差异。

2.1. CPython

在某些操作系统(包括Windows)上,LibFFI的代码(至少是所需部分)被复制到Python代码库中,并构建为_ctypes.pyd。虽然一开始更容易,但这不是一个好的做法,因为如果需要保持引用软件的最新状态,维护将变得非常困难,而且许可可能成为一个问题。因此,自Python 3.8起,他们停止了这样做([GitHub]: pytgon/cpython - bpo-45022:将当前libffi版本固定到特定版本以准备即将到来的更新, [GitHub]: pytgon/cpython - bpo-45022:在Windows构建中更新libffi至3.4.2)。差异(检查libffi_msvc):

  1. [GitHub]:pytgon/cpython - (3.7) cpython/Modules/_ctypes

  2. [GitHub]:pytgon/cpython - (3.8) cpython/Modules/_ctypes

这个变化有一些影响:

  • 构建:在构建机器上需要安装LibFFI代码(API),并且Python代码需要知道它的位置(类似于Linux世界中需要安装libffi-dev或等效的软件包)

  • LibFFI是一个独立的.dll文件(libffi*.dll),_ctypes.pyd依赖于它,并且必须在运行时存在(模块加载时)。在Windows上,这个.dllPython安装程序提供。

说明不同操作系统之间的差异:

  • Linux (WSL - Ubuntu):

    (qaic-env) [cfati@cfati-5510-0:/mnt/e/Work/Dev/StackExchange/StackOverflow/q073458524]> ~/sopr.sh
    ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###
    
    Running WSL
    [064bit prompt]>
    [064bit prompt]> uname -a
    Linux cfati-5510-0 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
    [064bit prompt]>
    [064bit prompt]> for g in 5 6 7 8 9 10 11; do _CTS=$(python3.${g} -c "import _ctypes;print(_ctypes.__file__)"); echo ${_CTS}; ldd ${_CTS} | grep ffi; done
    /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007fa14c4db000)
    /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007f6626e83000)
    /usr/lib/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007fad650e5000)
    /usr/lib/python3.8/lib-dynload/_ctypes.cpython-38-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007efd824bc000)
    /usr/lib/python3.9/lib-dynload/_ctypes.cpython-39-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007f85d46a3000)
    /usr/lib/python3.10/lib-dynload/_ctypes.cpython-310-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007ff599378000)
    /usr/lib/python3.11/lib-dynload/_ctypes.cpython-311-x86_64-linux-gnu.so
            libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007f11152b9000)
    
  • OSX:

    [cristian.fati@cfati-16i2019-0:~/Work/Dev/StackExchange/StackOverflow/q073458524]> ~/sopr.sh
    ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###
    
    Running OSX
    [064bit prompt]>
    [064bit prompt]> uname -a
    Darwin cfati-16i2019-0 22.5.0 Darwin Kernel Version 22.5.0: Thu Jun  8 22:22:22 PDT 2023; root:xnu-8796.121.3~7/RELEASE_X86_64 x86_64
    [064bit prompt]>
    [064bit prompt]> for g in 7 8 9 10 11; do _CTS=$(python3.${g} -c "import ctypes;print(_ctypes.__file__)"); echo ${_CTS}; otool -L ${_CTS} | grep ffi; done
    /usr/local/cellar/python@3.7/3.7.16/frameworks/python.framework/versions/3.7/lib/python3.7/lib-dynload/_ctypes.cpython-37m-darwin.so
    /usr/local/cellar/python@3.8/3.8.17_1/frameworks/python.framework/versions/3.8/lib/python3.8/lib-dynload/_ct
    
    

    2.2. 安纳科达

    当然,安纳科达Python 发行版遵循 CPython,但他们更进一步。

    (base) [cfati@CFATI-5510-0:e:\Work\Dev\StackExchange\StackOverflow\q073458524]> :: ---------- Anaconda Prompt ----------
    (base) [cfati@CFATI-5510-0:e:\Work\Dev\StackExchange\StackOverflow\q073458524]> cd /d f:\Install\pc064\Anaconda\Anaconda\Version
    
    (base) [cfati@CFATI-5510-0:f:\Install\pc064\Anaconda\Anaconda\Version]> sopr.bat
    ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###
    
    [prompt]> :: Reactivate base to have active environment in prompt
    [prompt]> conda deactivate & conda activate base
    
    (base) [prompt]> :: ---------- Anaconda Prompt (still) ----------
    (base) [prompt]> conda env list
    # conda environments:
    #
                             F:\Install\pc032\Intel\OneAPI\Version\intelpython\python3.7
                             F:\Install\pc032\Intel\OneAPI\Version\intelpython\python3.7\envs\2021.1.1
    base                  *  f:\Install\pc064\Anaconda\Anaconda\Version
    py_pc032_030602_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc032_030602_00
    py_pc064_030610_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030610_00
    py_pc064_030704_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030704_00
    py_pc064_030716_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030716_00
    py_pc064_030800_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030800_00
    py_pc064_030808_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030808_00
    py_pc064_030817_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00
    py_pc064_030900_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030900_00
    py_pc064_030917_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_00
    py_pc064_030917_01       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_01
    py_pc064_031000_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031000_00
    py_pc064_031006_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031006_00
    py_pc064_031012_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00
    py_pc064_031012_01       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_01
    py_pc064_031104_00       f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031104_00
    
    
    (base) [prompt]>
    (base) [prompt]> :: Search environments for _ctypes.pyd
    (base) [prompt]> dir /B /S "envs\*_ctypes.pyd"
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc032_030602_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030610_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030610_00\DLLs\instrumented\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030704_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030704_00\DLLs\instrumented\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030716_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030800_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030800_00\DLLs\instrumented\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030808_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030900_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_01\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031000_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031006_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_01\DLLs\_ctypes.pyd
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031104_00\DLLs\_ctypes.pyd
    
    (base) [prompt]>
    (base) [prompt]> :: Search environments for the FFI dll
    (base) [prompt]> dir /B /S "envs\*ffi*.dll"
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030800_00\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030808_00\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030817_00\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030900_00\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_00\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_030917_01\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031000_00\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031000_00\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031000_00\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031006_00\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031006_00\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031006_00\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_01\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_01\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_01\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031104_00\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031104_00\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031104_00\Library\bin\ffi.dll
    

    如下所示,有2种类型的 .dll 文件:

    1. libffi*.dll(位于与 _ctypes.pyd 相同的目录中)

    2. ffi*.dll(相对于 _ctypes.pyd 位于 ..\Library\bin 中)

    我是通过实证发现的,并非有官方来源 - 至少目前还没有。

    #1. 来自于 CPython(此外,旧版本没有 libffi*.dll),由 Python 包分发。
    #2. 来自于 LibFFI 包(拆分自 Python - 现在提供更精细的分类、单独的升级等)。有 3 个不同的 .dll 文件(ffi.dllffi-7.dllffi-8.dll),但它们只是副本(不知道为什么没有使用 SymLink 进行连接)。这似乎是较新的方法,被较新的 Python 版本所推荐(我认为从 v3.10 开始)。值得一提的是 v3.8.17,它似乎包含了这两种形式1
    在包内部扫描时,路径匹配(一旦去掉前导环境部分):

    (base) [prompt]> :: ---------- Anaconda Prompt (still) ----------
    (base) [prompt]> dir /B /S "pkgs\*ffi*.dll"
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_4\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_4\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_4\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_6\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_6\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.2-hd77b12b_6\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.4-hd77b12b_0\Library\bin\ffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.4-hd77b12b_0\Library\bin\ffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\libffi-3.4.4-hd77b12b_0\Library\bin\ffi.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.0-hff0d562_2\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.12-h6244533_0\DLLs\libffi-8.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.13-h6244533_0\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.17-h1aa4202_0\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.5-h5fd99cc_1\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.8.8-hdbf39b2_5\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.9.0-h6244533_2\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.9.12-h6244533_0\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.9.16-h6244533_2\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.9.17-h1aa4202_0\DLLs\libffi-7.dll
    f:\Install\pc064\Anaconda\Anaconda\Version\pkgs\python-3.9.17-h6244533_0\DLLs\libffi-7.dll
    

    3. 错误

    虽然错误提到了 _ctypes.pyd,但并不一定是 那个 .dll 出了问题(通常情况下并非如此),而是它的依赖项之一(或者依赖项的依赖项...)。即使涉及其他错误,[SO]: Python Ctypes - loading dll throws OSError: [WinError 193] %1 is not a valid Win32 application (@CristiFati's answer) 是一次全面的调查,它遵循相同的原则(这个错误在末尾的某个地方提到)。
    既然我们在这里,也许还值得阅读:

    3.1. 避免此问题

    有一些通用(常识)规则应该能够帮助避免出现问题。不用说,如果其中一个软件包存在错误(超出用户控制范围),错误仍然可能会出现:

    • 要注意正在使用的 Python 实例(活动中):[SO]: 如何在 Windows 10 上为特定的 Python 版本安装软件包?(@CristiFati 的答案)
    • 从 Conda 提示符中工作。
    • 只使用 Conda 管理的环境:[Conda.Docs]: 管理环境。在技术上,如果使用其他类型(VEnv、plain CPython 等),事情也可能能够工作,但很有可能会遇到麻烦(如果你正在阅读这个,你可能不应该这样做)。
    • 激活一个环境并只使用那一个。避免混合使用它们([SO]: PyCharm 不识别已安装的模块(@CristiFati 的答案))。激活将设置一些针对该环境的 env var:
    • (base) [prompt]> :: ---------- Anaconda Prompt (still) ----------
      (base) [prompt]> :: --- PATH in active (base) environment ---
      (base) [prompt]> echo off & (for %g in ("%PATH:;=" "%") do (echo %~g)) & echo on
      f:\Install\pc064\Anaconda\Anaconda\Version
      f:\Install\pc064\Anaconda\Anaconda\Version\Library\mingw-w64\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\Library\usr\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\Library\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\Scripts
      f:\Install\pc064\Anaconda\Anaconda\Version\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\condabin
      C:\WINDOWS\System32\WindowsPowerShell\v1.0
      C:\WINDOWS\System32
      C:\WINDOWS
      C:\WINDOWS\System32\Wbem
      C:\Install\pc064\Docker\Docker\Version\Docker\resources\bin
      C:\Program Files\dotnet
      e:\Work\Dev\Utils\current\Win
      e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts
      C:\Users\cfati\.dotnet\tools
      .
      
      (base) [prompt]>
      (base) [prompt]> :: --- Activate Python 3.10.12 environment ---
      (base) [prompt]> conda activate py_pc064_031012_00
      
      (py_pc064_031012_00) [prompt]> :: --- PATH in active (py_pc064_031012_00) environment ---
      (py_pc064_031012_00) [prompt]> echo off & (for %g in ("%PATH:;=" "%") do (echo %~g)) & echo on
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\mingw-w64\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\usr\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Library\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\Scripts
      f:\Install\pc064\Anaconda\Anaconda\Version\envs\py_pc064_031012_00\bin
      f:\Install\pc064\Anaconda\Anaconda\Version\condabin
      C:\WINDOWS\System32\WindowsPowerShell\v1.0
      C:\WINDOWS\System32
      C:\WINDOWS
      C:\WINDOWS\System32\Wbem
      C:\Install\pc064\Docker\Docker\Version\Docker\resources\bin
      C:\Program Files\dotnet
      e:\Work\Dev\Utils\current\Win
      e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts
      C:\Users\cfati\.dotnet\tools
      
      

      3.2. 故障排除

      有办法解决错误。[SO]: 使用命令行发现缺失模块("DLL load failed" 错误)(@CristiFati 的回答) 包含了一些能够帮助确定缺失/损坏依赖项的工具。在我们的情况下:

      (py_pc064_031012_00) [prompt]> :: ---------- Anaconda Prompt (still) ----------
      (py_pc064_031012_00) [prompt]> "f:\Install\pc064\LucasG\DependencyWalkerPolitistTexan\Version\DependenciesGui.exe" "envs\%CONDA_DEFAULT_ENV%\DLLs\_ctypes.pyd"
      
      (py_pc064_031012_00) [prompt]> conda deactivate & conda activate py_pc064_030817_00
      
      (py_pc064_030817_00) [prompt]> "f:\Install\pc064\LucasG\DependencyWalkerPolitistTexan\Version\DependenciesGui.exe" "envs\%CONDA_DEFAULT_ENV%\DLLs\_ctypes.pyd"
      
      • Python 3.10.12(包含并使用来自LibFFI包(更新版本)的.dll文件):

        Img0

      • Python 3.8.17 (1)(同时包含来自两个包的LibFFI .dll文件,但使用较旧的Python版本):

        Img1

      如上所示,依赖树(至少是自定义的依赖项)很简单。在这种情况下,99%的可能性是缺少ffi.dll文件。可以通过在环境中执行以下命令来解决这个问题:

      conda install libffi

      手动处理事务(复制文件)也是一种选择,但可能会在以后遇到麻烦。
      值得注意的是 PATH 环境变量,它可能包含具有相同 .dll 名称(在“好”的名称之前)的目录。查看[SO]: Can't get FontForge to import as a module in a custom Python script (@CristiFati's answer) 更新 #0 部分)以解决类似问题。
      在某些情况下,错误可能由其他因素触发(磁盘故障、手动删除、错误的软件包等),在这些情况下,重新创建环境可能解决问题。有时升级环境或者 Conda[Anaconda.Docs]: Updating from older versions)也可能有所帮助。

      如果错误固执不去,可能需要完全重新安装 Anaconda,但只在充分考虑并且作为最后的手段使用。

      4. 总结

      如果遇到这种情况,请按照以下步骤解决:

      搜索_ctypes.pyd的依赖项,如果缺失则安装(在环境内)拥有它们的包(通常是): conda install libffi
      如果_ctypes.pyd丢失,则重新安装其所属的包: conda install python
      也可以将文件从正确的包中复制(解压缩)到正确的(环境)路径中,但这仅适用于有经验的用户。
      检查PATH环境变量,因为它可能包含与“正确”的文件(.dll)干扰的路径。
      升级/重新创建环境。
      升级Conda。
      重新安装Anaconda(!!!将丢失所有环境!!!)。

1

我刚刚卸载了环境并重新安装了Anaconda,现在它可以正常工作。


我也遇到了这个误导性的错误,也就是所谓的“导入”问题。我猜测这是由于使用了几个不同的conda渠道安装(稍微不同版本的软件包)而引起的。因此最好只使用一个渠道。尝试:
  • 1 conda activate 环境名称,即使命令提示符显示已经激活
  • 2 conda update conda(基本环境和特定环境)
- PerteTotale

1

我也遇到了这个误导性的错误,也就是所谓的“导入”问题。

我猜测这是由于安装了(由于使用了几个不同的conda渠道而导致的)略有不同版本的软件包。因此最好只使用一个渠道。

尝试:

  1. 即使cmd prm显示已激活,请使用conda activate env
  2. conda update conda(base)
  3. conda install / update package(特定环境)
  4. 当在conda env中通过pip安装软件包并通过conda更新时,会显示相同的错误消息。 => pip install package_name --upgrade

1

我也遇到了类似的问题。

libffi-7.dll\Python310\DLLs 复制到我的环境文件夹中,问题就解决了。


0
我在安装Anaconda之后,在vcpkg中添加了这个问题。
G:\vcpkg_common\downloads\tools\python>G:\vcpkg_common\downloads\tools\python\python-3.11.5-x64\python.exe
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing _ctypes: Das angegebene Modul wurde nicht gefunden.

我故意更改了CWD,因为如果我在与我想要使用的Python相同的目录中,一切都能按预期工作。
向Python提供-E选项使其正常工作:
G:\vcpkg_common\downloads\tools\python>G:\vcpkg_common\downloads\tools\python\python-3.11.5-x64\python.exe -E
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
>>> exit()

然而,-E选项不应该起作用,因为没有设置相关的环境变量。
G:\vcpkg_common\downloads\tools\python>set | findstr PY

G:\vcpkg_common\downloads\tools\python>

查看sys.path,然而揭示了以下内容:
>>> sys.path
['', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64\\python311.zip', 'C:\\Python\\anaconda3\\Lib', 'C:\\Python\\anaconda3\\DLLs', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64\\Lib', 'C:\\Users\\neumann\\AppData\\Roaming\\Python\\Python311\\site-packages']

在错误情况下和
>>> sys.path
['', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64\\python311.zip', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64', 'G:\\vcpkg_common\\downloads\\tools\\python\\python-3.11.5-x64\\Lib', 'C:\\Users\\neumann\\AppData\\Roaming\\Python\\Python311\\site-packages']

在工作情况下,尝试从Anaconda位置加载DLL时出现错误,因为其路径在内置路径之前,导致观察到的错误。
在搜索注册表后,我发现:
HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\3.11\PythonPath

似乎是导致并行安装中断的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接