Python3: ImportError: при использовании значения из модульной многопроцессорности нет модуля с именем "_ctypes"
Я использую 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.3.2 через установку источника 3.4.0. Он установлен в /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 устранили проблему для меня.
для libffi-dev
сборки py 3.7 libffi-dev
, иначе позже произойдет сбой
При использовании RHEL/Fedora:
yum install libffi-devel
или же
sudo dnf install libffi-devel
Если вы используете Debian/Ubuntu:
sudo apt-get install libffi-dev
Ответ 2
На свежем образе 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
в команде make.
Кроме этого, я думаю, что выбор будет либо прочитать кодовую базу cpython, ища директивы #include
которые должны быть выполнены, но я обычно пытаюсь установить пакет и продолжаю читать вывод, устанавливая требуемые пакеты. пока это не удастся.
Напоминает мне историю Инженера, Менеджера и Программиста, чья машина катится вниз по склону.
Ответ 3
Подробные инструкции по установке Python 3.7 в CentOS или на любой Redhat Linux-машине:
- Загрузите Python с https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
- Извлечь содержимое в новую папку
- Открыть терминал в том же каталоге
- Запустите код ниже, шаг за шагом:
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
Думаю, я бы добавил установки 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
Обратитесь к этой теме, для индивидуальной установки libffi Python3.7 трудно найти расположение библиотеки libffi. Альтернативный метод - установить переменную CONFIGURE_LDFLAGS
в Makefile, например, CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64"
.
Ответ 6
pyenv wiki имеет предложения для различных систем для построения Python:
https://github.com/pyenv/pyenv/wiki
Ответ 7
Установка sudo apt-get update && sudo apt-get install libffi-dev
успешно после запуска sudo apt-get update && sudo apt-get install libffi-dev
(как предлагается здесь). Проблема была решена там.