Python3:ImportError:使用模块多处理中的值时没有名为“_ctypes”的模块

2025-02-10 08:57:00
admin
原创
74
摘要:问题描述:我正在使用 Ubuntu,并安装了 Python 2.7.5 和 3.4.0。在 Python 2.7.5 中,我可以成功分配变量x = Value('i', 2),但在 3.4.0 中却不行。我得到:Traceback (most recent call last): File "...

问题描述:

我正在使用 Ubuntu,并安装了 Python 2.7.5 和 3.4.0。在 Python 2.7.5 中,我可以成功分配变量x = Value('i', 2),但在 3.4.0 中却不行。我得到:

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/local/lib/python3.4/multiprocessing/context.py", line 132, in Value
      from .sharedctypes import Value
   File "/usr/local/lib/python3.4/multiprocessing/sharedctypes.py", line 10, in <
module>
   import ctypes
   File "/usr/local/lib/python3.4/ctypes/__init__.py", line 7, in <module>
      from _ctypes import Union, Structure, Array
ImportError: No module named '_ctypes'

我刚刚通过安装 3.4.0 的源更新到 3.3.2。它安装在/usr/local/lib/python3.4中。

我是否正确更新至 Python 3.4?

我注意到 Python 3.4 安装在usr/local/lib中,而 Python 3.3.2 仍安装在usr/lib中,因此它没有被覆盖。


解决方案 1:

安装libffi-dev并重新安装 python3.7 为我解决了这个问题。

需要干净地构建 py 3.7 libffi-dev ,否则后面的东西会失败

如果使用 RHEL/Fedora:

sudo yum install libffi-devel

或者

sudo dnf install libffi-devel

如果使用 Debian/Ubuntu:

sudo apt-get install libffi-dev

解决方案 2:

如果您使用 pyenv 并在 Debian/Raspbian/Ubuntu 上收到错误“没有名为‘_ctypes’的模块”(就像我一样),您需要运行以下命令:

sudo apt-get install libffi-dev
pyenv uninstall 3.7.6
pyenv install 3.7.6

把你的python版本改为3.7.6

解决方案 3:

在全新的 Debian 映像上,克隆https://github.com/python/cpython并运行:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev

现在执行configure上面克隆的文件:

./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall

我已经安装 3.7 并且可以使用了。

轻微更新

看起来我说过我会用更多的解释来更新这个答案,但两年后我没有什么可补充的。

  • 这篇 SO 文章解释了为什么某些库python-dev可能是必要的。

  • 这篇 SO 文章解释了为什么人们可以在make命令中使用与参数altinstall相反的参数。install

除此之外,我猜选择要么是通读 cpython 代码库来寻找#include需要满足的指令,但我通常会继续尝试安装包,并继续阅读输出来安装所需的包,直到成功。

这让我想起了工程师、经理和程序员的汽车从山上滚下来的故事。

解决方案 4:

在 CentOS 或任何 redhat linux 机器上安装 Python 3.7 的详细步骤:

  1. https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz下载 Python

  2. 提取新文件夹中的内容

  3. 在同一目录中打开终端

  4. 逐步运行以下代码:

sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 
./configure
make
make install

解决方案 5:

_ctypes在我的 Ubuntu 18.04 机器上,我遇到了使用 pyenv 安装的 python 后无法找到 python 的常见问题。

在我的情况下libffi-dev已经安装了。cpython按照@MikeiLL的建议从源代码安装也没有帮助。

最终发现这是一个自制问题。

ajkerrigans 在 pyenvs github 问题上建议的解决方案为我解决了这个问题。

解决方案摘要:告诉 pyenv 使用 Homebrew 管理的 GCC 构建 Python,命令如下:

CC="$(brew --prefix gcc)/bin/gcc-11" \npyenv install --verbose 3.10.0

这假定所有构建依赖项都已通过 Homebrew 进行安装,如pyenv wiki中所述。截至撰写本文时,Linux 上的 Homebrew 如下所示:

brew install bzip2 libffi libxml2 libxmlsec1 openssl readline sqlite xz zlib

解决方案 6:

我想添加 Centos 安装:

sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 

检查python版本:

python3 -V

创建虚拟环境:

virtualenv -p python3 venv

解决方案 7:

这为我解决了Debian上的相同错误:

sudo apt-get install libffi-dev

然后再次编译

参考:issue31652

解决方案 8:

所有解决方案都不起作用。一旦所有必需的软件包都已完全安装,您就必须重新编译 Python。

请按照以下步骤操作:

  1. 安装所需的软件包

  2. 跑步./configure --enable-optimizations

https://gist.github.com/jerblack/798718c1910ccdd4ede92481229043be

解决方案 9:

当我尝试使用以下命令在Ubuntu 18.04中安装Python 3.7.3时遇到此错误: 。 运行后安装成功(按照此处的建议)。 问题已在那里解决。$ pyenv install 3.7.3`$ sudo apt-get update && sudo apt-get install libffi-dev`

解决方案 10:

根据这个答案,只需复制粘贴到终端即可。

首次运行:
sudo apt-get -y update

然后:

sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get -y install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get -y install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get -y install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get -y install libssl-dev openssl
sudo apt-get -y install libffi-dev

PS:您可以一次性将整个块复制粘贴到终端中。

解决方案 11:

就我而言,导致各种 Python 安装问题(包括与_ctypesLinux /Linuxbrew 上的 Homebrewlibffi有关的问题)的原因是什么。一旦不再存在,我就会再次高兴。pyenv`brew`$PATH

解决方案 12:

参考这个帖子或者这个帖子,对于 libffi 的自定义安装,Python3.7 很难找到 libffi 的库位置。另一种方法是CONFIGURE_LDFLAGS在 Makefile 中设置变量,例如CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64"

解决方案 13:

我的解决方案:使用 apt-get 安装 libffi-dev 没有帮助。但这有帮助:从源代码安装 libffi,然后从源代码安装 Python 3.8。

我的配置:Ubuntu 16.04 LTS Python 3.8.2

步步:

从 Visual Studio Code 启动调试器时以及运行时,我收到错误消息“ModuleNotFoundError:没有名为‘_ctypes’的模块” python3 -c "import sklearn; sklearn.show_versions()"

  1. 的 README.md 文件提到 autoconf 和 automake 也是必需的。它们已经安装在我的系统上。

  • 无需文档即可配置 libffi:

./configure --disable-docs

make check

sudo make install

之后我的python安装可以找到_ctypes。

解决方案 14:

无需 root 的 CentOS

  1. 安装 libffi-3.2(不要使用 libffi-3.3)

wget ftp://sourceware.org/pub/libffi/libffi-3.2.tar.gz

tar -xzf libffi-3.2.tar.gz

cd libffi-3.2/

./configure --prefix=$YOUR_LIBFFI_DIR

make && make install

  1. 安装 Python3

./configure --prefix=$YOUR_PATH/python/3.7.10 LDFLAGS=-L${YOUR_LIBFFI_DIR}/lib64 PKG_CONFIG_PATH=${YOUR_LIBFFI_DIR}/lib/pkgconfig --enable-shared

制作&&制作安装

感谢JohnWSteill

解决方案 15:

我遇到了同样的问题。上述解决方案对我都不起作用。关键挑战是我没有 root 访问权限。因此,我首先下载了 libffi 的源代码。然后我使用常用​​命令对其进行了编译:

./configure --prefix=desired_installation_path_to_libffi
make 

然后我使用重新编译了python

./configure --prefix=/home/user123/Softwares/Python/installation3/  LDFLAGS='-L/home/user123/Softwares/library/libffi/installation/lib64'
make 
make install

在我的例子中,“home/user123/Softwares/library/libffi/installation/lib64”是 libffi.so 所在的 LIBFFI 安装目录的路径。而 /home/user123/Softwares/Python/installation3/ 是 Python 安装目录的路径。请根据您的情况进行修改。

解决方案 16:

如果您的问题与 VSCODE DEBUGGER 有关,请检查您当前选择的 Python 解释器。我安装了 Python3.10.9 和 Python3.10.6;但是,前者可能缺少一些依赖项,因此我切换到后者(我的操作系统默认解释器),从而解决了该问题。

要在 VSCODE 中更改 Python 解释器:

  1. 按住 ctrl+shift+P

  2. 搜索Python:Select Interpreter并尝试您的操作系统默认版本(运行时获取的版本python3 --version

  3. 如果问题仍未解决,请运行sudo apt-get install libffi-dev

解决方案 17:

如果您不介意使用Miniconda,则默认会安装必要的外部库和 _ctypes。它确实占用更多空间,并且可能需要使用较旧版本的 Python(例如,截至撰写本文时为 3.7.6 而不是 3.8.2)。

解决方案 18:

如何在没有 libffi 的情况下从源代码安装 Python /usr/local

  1. 从 github 下载 libffi 并安装到/path/to/local

  2. 下载python源代码并使用以下配置进行编译:

export PKG_CONFIG_PATH=/path/to/local/lib/pkgconfig
./configure --prefix=/path/to/python \n    LDFLAGS='-L/path/to/local/lib -Wl,-R/path/to/local/lib' \n    --enable-optimizations
make
make install

解决方案 19:

我正在使用MAC M1,并且遇到了这个错误

... __boot__.py", line 30, in <module> import ctypes
and something was said about the file libffi.8.dylib

我在Anaconda上下载了这个东西,现在一切正常:

https://anaconda.org/wakari/libffi

我通知你,由于上面的大部分内容要么不适用于MAC,要么已经过时,我的Python使用的是Anaconda 版本 3.10.4

使用 py2app 创建的应用程序文件现在可以工作了!!

解决方案 20:

类似案例:

  • 环境:Windows 11,Python 3.11

  • 问题:使用IDA打开二进制文件,错误:

E:DevToolsiOSReverseIDAIDA7.5IDAProloaders/uimage.py: No module named '_ctypes'
Traceback (most recent call last):
File "E:DevToolsiOSReverseIDAIDA7.5IDAPropythonida_idaapi.py", line 616, in IDAPython_ExecScript
exec(code, g)
File "E:/DevTools/iOSReverse/IDA/IDA7.5/IDAPro/loaders/uimage.py", line 79, in <module>
import ctypes
File "E:DevInstallPython311Libctypes__init__.py", line 8, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
  • 解决方案:添加系统环境变量:

+ `PYTHONPATH`=`E:DevInstallPython311Lib;E:DevInstallPython311DLLs;E:DevInstallPython311    cl;`
+ `PYTHONHOME`=`E:DevInstallPython311`
  • 参考:ImportError:没有名为“_ctypes”的模块

+ > Ctypes 包含在标准库中
+ > _ctypes.pyd 位于 PYTHONHOME/DLLs 中。您应该将该目录包含在 PYTHONPATH 环境变量中

解决方案 21:

这与vscode-jupyter出现的问题相关,并解决了该问题。

要在 VSCode 中使用 Jupyter,您需要libffi-devel先安装。

因此,如果您正在使用,pyenv则需要安装libffi-devel,卸载pyenv您需要使用的版本,然后重新安装它们:

sudo apt-get install libffi-dev
pyenv uninstall <Python version>
pyenv install <Python version>

解决方案 22:

2024,Centos9

yum groupinstall "Development Tools"
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
tar -xf Python-3.12.0.tgz
sudo yum install -y libffi-devel
cd Python-3.12.0
./configure --enable-optimizations
make -j $(nproc)
sudo make altinstall
python3.12 --version

解决方案 23:

您必须从包管理器加载缺少的 php3 (Python3) 模块。如果您使用的是 Ubuntu,我推荐Synaptic Package Manager

sudo apt-get install synaptic

你可以在那里简单地搜索缺少的模块。搜索 ctypes 并安装所有包。然后转到你的 Python 目录并执行

./configure
make install.

这应该可以解决你的问题。

解决方案 24:

如果你正在做某件事,但没有人会听你说,因为“你做错了”,但你却必须“以错误的方式”去做,原因太愚蠢了,无法解释,也超出了你的控制能力,你可以试试这个:

获取 libffi 并以通常方式将其安装到您的用户安装区域。

git clone https://github.com/libffi/libffi.git
cd libffi
./configure --prefix=path/to/your/install/root
make
make install

然后返回到你的 Python 3 源代码,在 Python 源目录顶层的 setup.py 中找到这部分代码

        ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
        if not ffi_inc or ffi_inc[0] == '':
            ffi_inc = find_file('ffi.h', [], inc_dirs)
        if ffi_inc is not None:
            ffi_h = ffi_inc[0] + '/ffi.h'
            if not os.path.exists(ffi_h):
                ffi_inc = None
                print('Header file {} does not exist'.format(ffi_h))
        ffi_lib = None
        if ffi_inc is not None:
            for lib_name in ('ffi', 'ffi_pic'):
                if (self.compiler.find_library_file(lib_dirs, lib_name)):
                    ffi_lib = lib_name
                    break

        ffi_lib="ffi"  # --- AND INSERT THIS LINE HERE THAT DOES NOT APPEAR ---
        if ffi_inc and ffi_lib:
            ext.include_dirs.extend(ffi_inc)
            ext.libraries.append(ffi_lib)
            self.use_system_libffi = True

并添加我在上面用注释标记的行。为什么这是必要的,为什么没有办法让 configure 在 Linux 平台上尊重“--without-system-ffi”,也许我会在接下来的几个小时内找出为什么它“不受支持”,但从那以后一切都正常了。否则,祝你好运……YMMV。

它的作用:只是覆盖那里的逻辑并导致编译器链接命令添加“-lffi”,这才是它真正需要的。如果您有用户安装的库,只要您的PKG_CONFIG_PATH包含,它就可能能够很好地检测标题path/to/your/install/root/lib/pkgconfig

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用