web-dev-qa-db-fra.com

Python3: ImportError: aucun module nommé '_ctypes' lors de l'utilisation de la valeur du multitraitement de module

J'utilise Ubuntu et j'ai installé Python 2.7.5 et 3.4.0. Dans Python 2.7.5, je peux attribuer avec succès une variable x = Value('i', 2), mais pas dans 3.4.0. Je reçois:

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'

Je viens de mettre à jour la version 3.3.2 en installant la source 3.4.0. Il s’est installé dans / usr/local/lib/python3.4.

Ai-je mis à jour correctement Python 3.4?

J'ai remarqué que Python 3.4 est installé dans sr/local/lib, alors que Python 3.3.2 est toujours installé dans sr/lib, il n'a donc pas été écrasé.

79
htc_m8

L'installation de libffi-dev et la réinstallation de python3.7 ont résolu le problème.

pour construire proprement le py 3.7 libffi-dev est requis, sinon les commandes ultérieures échoueront

Si vous utilisez RHEL/Fedora:

yum install libffi-devel

ou

Sudo dnf install libffi-devel

Si vous utilisez Debian/Ubuntu:

Sudo apt-get install libffi-dev
151
dotbit

Sur une nouvelle image Debian, clonage https://github.com/python/cpython et en cours d'exécution:

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

Exécutez maintenant le fichier configure cloné ci-dessus:

./configure
make # alternatively `make -j 4` will utilize 4 threads
Sudo make altinstall

Got 3.7 installé et travaille pour moi.

LÉGÈRE MISE À JOUR

On dirait que j'ai dit que je mettrais à jour cette réponse avec quelques explications supplémentaires et deux ans plus tard, je n'ai pas grand chose à ajouter.

  • this SO post explique pourquoi certaines bibliothèques telles que python-dev peuvent être nécessaires.
  • this SO post explique pourquoi on peut utiliser l'argument altinstall par opposition à install dans la commande make .

En dehors de cela, je suppose que le choix serait soit de lire la base de code de cpython à la recherche des directives #include qu'il faut respecter, mais ce que je fais habituellement, c'est d'essayer d'installer le paquet et de continuer à lire le résultat de l'installation. les paquets requis jusqu'à ce qu'il réussisse.

Cela me rappelle l’histoire de la ingénieur, directeur et programmeur dont la voiture roule en bas d’une colline .

100
MikeiLL

Les étapes détaillées pour installer Python 3.7 dans CentOS ou sur tout ordinateur Linux Redhat:

  1. Téléchargez Python à partir de https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
  2. Extraire le contenu dans un nouveau dossier
  3. Ouvrir le terminal dans le même répertoire
  4. Exécutez le code ci-dessous étape par étape:
Sudo yum -y install gcc gcc-c++ 
Sudo yum -y install zlib zlib-devel
Sudo yum -y install libffi-devel 
./configure
make
make install
19
Alok Deep

Je pensais ajouter les installations Centos:

Sudo yum -y install gcc gcc-c++ 
Sudo yum -y install zlib zlib-devel
Sudo yum -y install libffi-devel 

Vérifiez la version python:

python3 -V

Créez virtualenv:

virtualenv -p python3 venv

12
S.E Furgeson

Je rencontre cette erreur lorsque j'ai essayé d'installer Python 3.7.3 dans Ubuntu 18.04 avec la commande suivante: $ pyenv install 3.7.3. L'installation a réussi après l'exécution de $ Sudo apt-get update && Sudo apt-get install libffi-dev (comme suggéré ici ). Le problème était résolu .

4
akrapovich

Reportez-vous à this thread , pour l'installation personnalisée de libffi, il est difficile pour Python3.7 de trouver l'emplacement de la bibliothèque de libffi. Une autre méthode consiste à définir la variable CONFIGURE_LDFLAGS dans le Makefile, par exemple CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64".

1
pengchy