Salut Lionel,
lionel_css3 a écrit :
et quand je lance le code j'ai ce message d'erreur:
ImportError: cannot import name 'load_dotenv' from partially initialized
module 'dotenv' (most likely due to a circular import)
(w:\www-statique\PYTHON\Open-api-bible-3.12\dotenv.py)
C'est une erreur classique en Python. C'est deux class (ou plus) s'importent mutuellement, créant une dépendance cyclique. Cela peut entraîner des erreurs de type ImportError ou des comportements inattendus si la dépendance n'est pas gérée correctement.
Voici un exemple simple pour illustrer une importation circulaire :
Imaginons deux fichiers Python, class_a.py et class_b.py, qui tentent de s'importer l'un l'autre.
class_a.py
print("Début de l'exécution de module_a.py")
from module_b import ModuleB # Importe ModuleB depuis module_b
class ClassA:
def __init__(self, name):
self.name = name
def greet(self):
print(f"Bonjour de ModuleA, je m'appelle {self.name}!")
# Tente d'utiliser une fonction ou une classe de ClassB
b_instance = ClassB("Instance B de ClassA")
b_instance.farewell()
print("Fin de l'exécution de module_a.py")
class_b.py
print("Début de l'exécution de class_b.py")
from class_a import ClassA # Importe ClassA depuis class_a
class ClassB:
def __init__(self, name):
self.name = name
def farewell(self):
print(f"Au revoir de ClassB, je m'appelle {self.name}!")
# Tente d'utiliser une fonction ou une classe de ClassA
a_instance = ClassA("Instance A de ClassB")
a_instance.greet()
print("Fin de l'exécution de module_b.py")
Lorsque tu tentes d'exécuter l'une de ces class (par exemple, en créant un fichier main.py et en important l'une d'eux, ou simplement en exécutant python class_a.py ou python class_b.py), voici ce qui se passe :
1. Python commence à exécuter class_a.py.
2. Il arrive à la ligne from class_b import ClassB.
3. Python tente alors d'importer class_b.py.
4. Lorsque class_b.py commence son exécution, il arrive à la ligne from class_a import ClassA.
À ce stade, class_a.py est déjà en cours d'exécution et n'a pas encore terminé de définir ClassA (car il attend que class_b.py finisse d'être importé).
Python se retrouve dans un état où class_a tente d'importer class_b, et class_b tente d'importer class_a avant que l'un d'eux n'ait complètement défini ses objets, ce qui conduit à une ImportError ou, dans certains cas plus subtils, à un objet ClassA ou ClassB qui n'est pas encore entièrement construit ou qui manque d'attributs.
Pour répondre à ton souci général, je viens de tester et j'ai bien une réponse. C'est une erreur.
main.py
import os
from openai import OpenAI
from dotenv import load_dotenv
if __name__ == '__main__':
load_dotenv()
key = os.getenv('API_KEY')
client = OpenAI(api_key=key)
response = client.responses.create(
model="gpt-4o",
instructions="You're a Python expert",
input="How do I check if a Python object is an instance of a class?",
)
print(response.output_text)
la réponse :
(hello-openai) user@host:~/www/divers/alsacreations/hello-openai$ python main.py
Traceback (most recent call last):
File "/home/user/www/divers/alsacreations/hello-openai/main.py", line 10, in <module>
response = client.responses.create(
File "/home/user/www/divers/alsacreations/hello-openai/.venv/lib/python3.9/site-packages/openai/resources/responses/responses.py", line 735, in create
return self._post(
File "/home/user/www/divers/alsacreations/hello-openai/.venv/lib/python3.9/site-packages/openai/_base_client.py", line 1249, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
File "/home/user/www/divers/alsacreations/hello-openai/.venv/lib/python3.9/site-packages/openai/_base_client.py", line 1037, in request
raise self._make_status_error_from_response(err.response) from None
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
Mon message d'erreur est explicite, je dois passer à la caisse pour pouvoir utiliser OpenAI.
ps : mdr => ta mère en short
Modifié par Niuxe (02 Jul 2025 - 20:30)