我正在使用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 中,所以它不是覆盖。
答案 0 :(得分:127)
安装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
答案 1 :(得分:97)
在新的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并为我工作。
看起来我说我会用更多的解释更新这个答案,两年后我没有多少补充。
python-dev
的库可能是必要的。altinstall
而不是install
参数。除此之外,我想选择是通过cpython代码库来查找需要满足的#include
指令,但我通常做的是继续尝试安装包并继续阅读输出安装所需的包直到成功。
让我想起了Engineer, the Manager and the Programmer whose car rolls down a hill的故事。
答案 2 :(得分:48)
如果您使用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 :(得分:16)
在CentOS或任何Redhat Linux计算机上安装Python 3.7的详细步骤:
sudo yum -y install gcc gcc-c++ sudo yum -y install zlib zlib-devel sudo yum -y install libffi-devel ./configure make make install
答案 4 :(得分:11)
我想添加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
答案 5 :(得分:7)
答案 6 :(得分:3)
当我尝试使用下一条命令<pre></pre>
在 Ubuntu 18.04 中安装 Python 3.7.3 时遇到此错误。
运行var text_with_line_breaks = retrieve_some_text_from_php();
var element = document.querySelectorAll('#output');
element.innerHTML = '<pre>' + text_with_line_breaks + '</pre>';
后安装成功(如建议的here)。
there问题已解决。
答案 7 :(得分:3)
我的解决方案: 使用apt-get安装libffi-dev并没有帮助。 但这有帮助:从源代码安装libffi,然后从源代码安装Python 3.8。
我的配置: Ubuntu 16.04 LTS Python 3.8.2
逐步:
从Visual Studio Code启动调试器并运行python3 -c "import sklearn; sklearn.show_versions()"
时,出现错误消息“ ModuleNotFoundError:没有名为'_ctypes'的模块”。
sudo apt-get install libtool
来自libffi的文件README.md提到autoconf和automake也是必需的。它们已经安装在我的系统上。 ./configure --disable-docs
make check
sudo make install
./configure
make
make test
make install
之后,我的python安装程序可以找到_ctypes。
答案 8 :(得分:1)
根据 this 的回答,只需复制粘贴到终端即可。
第一次运行:
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:您可以一次性将整个块复制粘贴到终端中。
答案 9 :(得分:1)
没有root的CentOS
安装 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
安装 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
make && make install
答案 10 :(得分:1)
我遇到了同样的问题。以上解决方案均不适用于我。关键的挑战是我没有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安装目录的路径。根据您的情况进行修改。
答案 11 :(得分:1)
请参阅this thread,对于libffi的自定义安装,Python3.7很难找到libffi的库位置。另一种方法是在Makefile中设置CONFIGURE_LDFLAGS
变量,例如CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64"
。
答案 12 :(得分:0)
您必须从程序包管理器中加载缺少的php3(Python3)模块。
如果您有Ubuntu,我建议您使用Synaptic Package Manager
:
sudo apt-get install synaptic
您可以在那里简单地搜索缺少的模块。搜索ctypes并安装所有软件包。然后转到您的Python目录并执行
./configure
make install.
这应该可以解决您的问题。
答案 13 :(得分:0)
如果您不介意使用Miniconda,则默认情况下会安装必需的外部库和_ctypes。它确实需要更多空间,并且可能需要使用适度较旧的Python版本(例如,撰写本文时为3.7.6而不是3.8.2)。
答案 14 :(得分:0)
如何在 /usr/local
中没有 libffi 的情况下从源代码安装 Python?
/path/to/local
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
答案 15 :(得分:0)
解决方案均无效。您必须再次重新编译python。完全安装完所有必需的软件包后。
关注此:
./configure --enable-optimizations
https://gist.github.com/jerblack/798718c1910ccdd4ede92481229043be
答案 16 :(得分:-1)
如果您正在做某事,这里没有人会听到您的声音,因为“您做错了方法”,但是您不得不出于“无法理解”的原因“做错了”,而且超出了您的控制能力,您可以尝试以下方法:
获取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
,它就可以很好地检测标题。