Je suis en train de chercher à savoir s'il s'agit d'une erreur dans mon design, ou d'une erreur dans la bibliothèque redis-py. Essentiellement, ma compréhension de l'espace de noms en Python est que les packages devraient être conçus de telle sorte que tous les composants soient sous l'espace de noms du package. Cela signifie que si j'ai une file d'attente dans packageA et une file d'attente dans packageB, il ne devrait pas y avoir de collision car elles sont namespaced (packageA.queue et packageB.queue). Cependant, je rencontre une erreur dans un package que je suis en train de construire.
Voici la structure de répertoire pour le package que je suis en train de construire :
arbre
.
__init__.py
net
__init__.py
rconn.py
test.py
Les fichiers __init__.py
sont tous vides. Voici le code de mon fichier test.py :
cat test.py
from net import rconn
et voici le code de mon fichier net/rconn.py :
cat net/rconn.py
import redis
En exécutant test.py, tout fonctionne, pas d'erreurs. Cependant, si j'ajoute un répertoire queue ici et que je crée un init.py vide à l'intérieur, voici le nouvel arbre :
arbre
.
__init__.py
net
__init__.py
rconn.py
queue
__init__.py
test.py
Exécuter test.py entraîne l'erreur suivante :
Traceback (most recent call last):
File "test.py", line 1, in
from net.rconn import ass
File "/Users/yosoyunmaricon/python_test/net/rconn.py", line 1, in
import redis
File "/usr/local/lib/python3.7/site-packages/redis/__init__.py", line 1, in
from redis.client import Redis, StrictRedis
File "/usr/local/lib/python3.7/site-packages/redis/client.py", line 10, in
from redis._compat import (b, basestring, bytes, imap, iteritems, iterkeys,
File "/usr/local/lib/python3.7/site-packages/redis/_compat.py", line 139, in
from queue import Queue
ImportError: cannot import name 'Queue' from 'queue' (/Users/yosoyunmaricon/python_test/queue/__init__.py)
Donc, je comprends ce qui se passe. Le code Redis dit from queue import Queue
, et lorsque je crée un répertoire queue vide (c'est-à-dire, sans Queue), cela casse le package. Ma question est la suivante : Est-ce un bon design ? Est-ce que le package Redis devrait être plus explicite et dire quelque chose du genre from redis.queue import Queue
, ou s'agit-il simplement d'une erreur dans mon propre design ?