Python3: ImportError:没有命名为&#39的模块;当使用Value from模块multiprocessing时

我使用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 /地方/ lib中,而Python 3.3.2仍然安装在usr / lib中,所以它没有被覆盖。

346833 次浏览

在一个新的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文章解释了为什么在使命令中可以使用altinstall而不是install参数。

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

让我想起了工程师,经理和程序员,他的车滚下了山坡的故事。

我想我应该添加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:

virtualenv -p python3 venv

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

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

如果使用RHEL/Fedora:

yum install libffi-devel

sudo dnf install libffi-devel

如果使用Debian/Ubuntu:

sudo apt-get install libffi-dev

在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

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

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

.

.

这些解决方案都不奏效。你必须重新编译你的python;一旦所有所需的包完全安装。

遵循这个:

  1. 安装所需软件包
  2. 运行./configure --enable-optimizations

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

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

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

使用你的python版本,而不是3.7.6

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

获取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

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

它的作用:只是覆盖那里的逻辑,并导致编译器链接命令添加"-lffi"这就是它真正需要的。如果你的库是用户安装的,那么只要你的PKG_CONFIG_PATH包含path/to/your/install/root/lib/pkgconfig,它可能就能很好地检测到头文件。

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

你必须从包管理器中加载缺少的php3 (Python3)模块。 如果你有Ubuntu,我推荐Synaptic Package Manager:

sudo apt-get install synaptic

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

./configure
make install.

这应该能解决你的问题。

< p >我的解决方案: 用apt-get安装libffi-dev没有帮助。 但是这有帮助:从源代码安装libffi,然后从源代码安装Python 3.8 < p >我的配置: Ubuntu 16.04 LTS Python 3.8.2 < / p >

循序渐进:

当从Visual Studio Code启动调试器并运行python3 -c "import sklearn; sklearn.show_versions()"时,我得到了错误消息“ModuleNotFoundError: No module named '_ctypes'”。

  • https://github.com/libffi/libffi/releases下载libffi v3.3
  • install libtool: sudo apt-get install libtool 文件README。libffi的Md提到autoconf和automake也是必要的。它们已经安装在我的系统上
  • 配置libffi不带docs:

./configure --disable-docs

make check

sudo make install

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

这个解决了与我在Debian上的错误相同:

sudo apt-get install libffi-dev

然后再次编译

参考:issue31652

我也有同样的问题。以上的方法对我来说都没用。关键的挑战是我没有根权限。因此,我首先下载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安装目录的路径。所以是定位。“/home/user123/ software /Python/installation3/ is”为Python安装目录的路径。根据您的情况修改它们。

如何从源代码安装Python没有libffi在/usr/local?

  1. 从github下载libffi并安装到/path/to/local
  2. 下载python源代码并按以下配置进行编译:
export PKG_CONFIG_PATH=/path/to/local/lib/pkgconfig
./configure --prefix=/path/to/python \
LDFLAGS='-L/path/to/local/lib -Wl,-R/path/to/local/lib' \
--enable-optimizations
make
make install

没有根的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
    . txt 使,,使安装< / p >

  2. < p >安装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

基于答案,只需复制粘贴到终端。

< p >首次运行: sudo apt-get -y update < / p >

然后:

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:你可以复制粘贴整个块到终端在一个去。

在我的例子中,导致各种Python安装问题(包括与_ctypeslibffi有关的问题)的是Linux / Linuxbrew上的Homebrew。一旦brew不再在$PATH中,pyenv就会再次快乐。

在我的Ubuntu 18.04机器上,我有一个常见的问题,python没有找到_ctypes与pyenv安装的python。

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

结果发现是自制的问题。

Ajkerrigans建议解决pyenvs github问题为我解决了这个问题。

解决方案总结:告诉pyenv使用homebrew管理的GCC构建Python,使用如下命令:

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

这假设任何构建依赖也已经通过pyenv维基中指定的Homebrew安装。在写这篇文章时,Linux上的Homebrew看起来是这样的:

brew install bzip2 libffi libxml2 libxmlsec1 openssl readline sqlite xz zlib

我正在使用MAC M1并且我有这个错误:

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

下载这个东西在水蟒和现在一切工作:

https://anaconda.org/wakari/libffi

我告诉你,因为上面的大部分不是MAC或过时,我的Python是在水蟒 版本3.10.4

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