我使用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中,所以它没有被覆盖。


当前回答

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

我的配置: Ubuntu 16.04 LTS Python 3.8.2

循序渐进:

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

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

. / configure——disable-docs

做检查

Sudo make install

从https://www.python.org/downloads/下载python 3.8 . / configure 使 做测试 制作安装

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

其他回答

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

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

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

从https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz下载Python 解压新文件夹中的内容 在同一目录下打开终端 一步一步运行下面的代码:

Sudo yum -y安装GCC GCC -c++ Sudo yum -y install zlib-devel Sudo yum -y安装libffi-devel . / configure 使 制作安装

在一个新的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
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall

安装了3.7,为我工作。

轻微的更新

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

这篇SO帖子解释了为什么像python-dev这样的库可能是必要的。 这篇SO帖子解释了为什么在make命令中使用altinstall而不是install参数。

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

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

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

从github下载libffi,安装到/path/to/local 下载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

在我的例子中,导致各种Python安装问题(包括与_ctypes和libffi有关的问题)的是Linux / Linuxbrew上的Homebrew。一旦brew不再在$PATH中,pyenv又高兴了。