web-dev-qa-db-fra.com

Python AttributeError: l'objet 'module' n'a pas d'attribut 'Serial'

J'essaie d'accéder à un port série avec Python 2.6 sur mon Raspberry Pi sous Debian. Mon script nommé serial.py tente d'importer pySerial:

import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write("hello world!")

Pour une raison quelconque, il refuse d'établir la connexion série avec cette erreur:

AttributeError: 'module' object has no attribute 'Serial'

Lorsque j'essaie de saisir le même code dans l'interpréteur interactif Python, il ne fonctionne toujours pas.

Étrangement, cela fonctionnait il y a environ deux heures.

Quel pourrait être le problème? J'ai essayé de résoudre ce problème depuis un moment, en installant à nouveau pySerial, en réécrivant mon code, en revérifiant le port série, etc.

Merci d'avance!

107
hao_maike

Vous importez le module, pas la classe. Donc, vous devez écrire:

from serial import Serial

Vous devez installer le module serial correctement: pip install pyserial.

84
VGO

J'ajoute cette solution aux personnes qui commettent la même erreur que moi.

Dans la plupart des cas: renommez votre fichier de projet 'serial.py' et supprimez serial.pyc s'il existe, vous pouvez alors effectuer une 'importation série' simple sans erreur d'attribut.

Un problème survient lorsque vous importez "quelque chose" lorsque votre nom de fichier python est "quelque chose.py".

166
sql

J'ai accidentellement installé 'série' (Sudo python -m pip install serial) au lieu de 'pySerial' (Sudo python -m pip install pyserial), ce qui a entraîné la même erreur.

Si les solutions mentionnées précédemment ne fonctionnaient pas pour vous, vérifiez si vous avez installé la bonne bibliothèque.

109
Kevin

Vous avez installé le paquet incorrect nommé ' serial '.

  • Exécutez pip uninstall serial pour python 2.x ou pip3 uninstall serial pour python 3.x
  • Puis installez pyserial s'il n'est pas déjà installé en exécutant pip install pyserial pour python 2.x orpip3 install pyserial pour python 3.x.
17
FutureJJ

Si vous êtes comme moi impuissant, essayez ceci:

Répertoriez tous les sous-modules de "Série" (ou le paquet avec lequel vous rencontrez des problèmes) avec la méthode décrite ici: Répertoriez tous les modules qui font partie d'un paquet python

Dans mon cas, les problèmes résolus les uns après les autres.

... ressemble à un bug pour moi ...

3
Nearoo

Ce problème est dû au fait que votre projet s'appelle serial.py et que la bibliothèque importée porte le nom serial, changez le nom et c’est tout.

2
davidleosam

Oui, ce sujet est un peu vieux mais je voulais partager la solution qui a fonctionné pour moi pour ceux qui pourraient en avoir besoin quand même

Comme ALi l'a dit, essayez de localiser votre programme en utilisant ce qui suit à partir du terminal:

 Sudo python3
 import serial

print(serial.__file__) -> Copier

CTRL+D #(to get out of python)

Sudo python3 -> coller /__init__.py

Activer __init__.py dira à votre programme "ok je vais utiliser Serial from python3". Mon problème était que mon programme python3 utilisait Serial from python 2.7

Autre solution: supprimer les autres versions de python

Cao

Sources: https://raspberrypi.stackexchange.com/questions/74742/python-serial-serial-module-not-found-error/85930#859

Faire un effort

1
Benjamin

Cette erreur peut également se produire si vous avez des dépendances circulaires. Vérifiez vos importations et assurez-vous de ne pas avoir de cycle.

1
Chad Zawistowski