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

htc*_*_m8 86 python install compiler-errors failed-installation python-3.4

我正在使用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'
Run Code Online (Sandbox Code Playgroud)

我刚刚通过安装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中,所以它没有被覆盖.

dot*_*bit 173

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

干净地建立py 3.7 libffi-dev 是必需的,否则以后的东西将失败

如果使用RHEL/Fedora:

yum install libffi-devel
Run Code Online (Sandbox Code Playgroud)

要么

sudo dnf install libffi-devel
Run Code Online (Sandbox Code Playgroud)

如果使用Debian/Ubuntu:

sudo apt-get install libffi-dev
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您已经编译了自己的 Python 发行版(例如通过“pyenv install”),则需要在安装包后重新编译发行版。 (51认同)
  • 我已经安装了`libffi-dev`,但仍然出现此错误 (10认同)
  • 在Ubuntu 16.04 LTS上使用`pyenv`安装Python`3.7.0`时遇到了这个问题。在`sudo apt-get install libffi-dev`上面可以解决问题。 (7认同)
  • 这在 Python 3.9 上对我有用。我有 3.8,它工作正常,然后我从源代码安装了 3.9,pip install 要求失败并出现相同的错误。安装建议的包并重新构建 Python 3.9 后,它起作用了。 (5认同)
  • 如果您使用的是linux,执行`ldconfig`来加载新的`libffi.so`。`apt-get install libffi-dev` 的主要目的是安装一个名为 `libffi.so` 的文件,您可以通过 `dpkg -L libffi-dev` @tushar_ecmc 检查它 (4认同)
  • 太好了,通过`asdf-vm`与Python 3.7的安装效果很好 (2认同)

Mik*_*iLL 103

在一个新的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
Run Code Online (Sandbox Code Playgroud)

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

./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall
Run Code Online (Sandbox Code Playgroud)

已安装3.7并为我工作.

轻微更新

看起来我说我会用更多的解释更新这个答案,两年后我没有太多补充.

  • 这个SO帖子解释了为什么某些类似的库python-dev可能是必要的.
  • 这篇SO帖子解释了为什么人们可能会在make命令中使用与参数altinstall相对的东西.install

除此之外,我想选择是通过cpython代码库来查找#include需要满足的指令,但我通常做的是继续尝试安装软件包并继续阅读输出安装所需的软件包,直到它成功.

让我想起了工程师,经理和程序员的故事,他们的车从山上滚下来.

  • 老实说,@ Veky我做了一个网络搜索错误,"ImportError:没有名为'_ctypes'的模块"并且挖掘,可能在它工作之前尝试了一些事情.将更新答案以澄清我对APT,Python,make等的不了解. (4认同)
  • 太棒了.现在,你能告诉我你是如何得到上面的清单的吗?通过反复试验?:-O (3认同)

小智 91

如果您在 Debian/Raspbian/Ubuntu 上使用 pyenv 并收到错误“No module named '_ctypes'”(就像我一样),您需要运行以下命令:

sudo apt-get install libffi-dev
pyenv uninstall 3.7.6
pyenv install 3.7.6
Run Code Online (Sandbox Code Playgroud)

把你的python版本而不是3.7.6

  • 您不需要先卸载Python。只需重新安装它就会重新编译 Python 二进制文件,这就是所需要的。 (4认同)
  • 是的,重新安装 python 是必要的。 (4认同)
  • 感谢您的回答,投票最高的人拥有我可能需要的完整列表,但这提醒我通过“pyenv”重新安装,以便真正让事情正常工作。使用 pyenv 比获取源代码并执行所有“make”操作要容易得多。 (2认同)
  • 这对我在 Ubuntu 上有用。简单有效。 (2认同)

小智 21

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

就我而言libffi-dev已经安装了。cpython按照@MikeiLL的建议,从源代码安装也没有帮助。

原来是自制程序的问题。

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

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

CC="$(brew --prefix gcc)/bin/gcc-11" \
pyenv install --verbose 3.10.0
Run Code Online (Sandbox Code Playgroud)

这假设所有构建依赖项也已按照pyenv wiki中的指定通过 Homebrew 安装。在撰写本文时,Linux 上的 Homebrew 看起来像这样:

brew install bzip2 libffi libxml2 libxmlsec1 openssl readline sqlite xz zlib
Run Code Online (Sandbox Code Playgroud)


小智 20

在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
Run Code Online (Sandbox Code Playgroud)

  • 这在 CentOS 上不再适用。`没有可用的 libffi-devel 软件包` (2认同)

小智 13

以为我会添加Centos安装:

sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 
Run Code Online (Sandbox Code Playgroud)

检查python版本:

python3 -V

创建virtualenv:

virtualenv -p python3 venv

  • 这被标记为低质量,我正在审查队列中查看它.它真的不能作为一个独立的答案.我打算建议删除,但也许你可以通过扩展它来改进它? (2认同)

has*_*.sd 11

这为我在Debian解决了同样的错误:

sudo apt-get install libffi-dev
Run Code Online (Sandbox Code Playgroud)

并再次编译

参考:issue31652


小智 10

没有一个解决方案有效。你必须再次重新编译你的python;一旦完全安装了所有必需的软件包。

按照这个:

  1. 安装所需的包
  2. ./configure --enable-optimizations

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

  • 实际上很好的答案。每个人都提到你需要 libffi-devel 并且它可以解决它,问题是你还需要重新编译 python。我几乎放弃了 libffi。 (2认同)

Tra*_*tal 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
Run Code Online (Sandbox Code Playgroud)

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


akr*_*ich 6

我尝试使用下一个命令在Ubuntu 18.04中安装Python 3.7.3时遇到此错误。运行后安装成功(如建议在这里)。这个问题在那里解决了。$ pyenv install 3.7.3$ sudo apt-get update && sudo apt-get install libffi-dev


Evg*_*kiy 5

就我而言,导致各种 Python 安装问题的原因包括与_ctypesLinux / Linuxbrew 上的 Homebrewlibffi有关的问题。曾经的幸福再次不再存在了。pyenvbrew$PATH