Je jouais avec le module dateutil
in Python 2.7.3. Je voulais simplement utiliser:
import dateutil
dateutil.parser.parse("01-02-2013")
Mais j'ai une erreur:
AttributeError: 'module' object has no attribute 'parser'
J'ai vérifié quels attributs dateutil
possède :
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__']
Le fait est que lorsque j'essaie d'importer parser
de dateutil
directement, cela semble exister:
from dateutil import parser
print parser.parse("01-02-2013")
# output: 2013-01-02 00:00:00
Après le from dateutil import parser
, parser
est également apparu comme par magie dans le dateutil
importé lui-même:
print dir(dateutil)
# output: ['__author__', '__builtins__', '__doc__', '__file__', '__license__',
# '__name__', '__package__', '__path__', '__version__', 'parser',
# 'relativedelta', 'tz']
Notez que certains autres attributs (comme rrule
) manquent toujours dans cette liste.
Quelqu'un sait ce qui se passe?
Vous n'avez pas importé dateutil.parser
. Vous pouvez le voir, mais vous avez pour l'importer d'une manière ou d'une autre.
>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)
C'est parce que le parser.py
est un module du package dateutil
. Il s'agit d'un fichier distinct dans la structure des dossiers.
Répondez à la question que vous avez posée dans les commentaires, la raison pour laquelle relativedelta
et tz
apparaissent dans l'espace de noms après avoir from dateutil import parser
est parce que parser
lui-même importe relativedelta
et tz
.
Si vous regardez le code source de dateutil/parser.py
, vous pouvez voir les importations.
# -*- coding:iso-8859-1 -*-
"""
Copyright (c) 2003-2007 Gustavo Niemeyer <[email protected]>
This module offers extensions to the standard Python
datetime module.
"""
... snip ...
from . import relativedelta
from . import tz