python - AttributeError cuando se usa "import dateutil" y "dateutil.parser.parse()" pero no hay problemas cuando se usa "desde el analizador de importaciĆ³n de dateutil"
python-2.7 python-dateutil (1)
Estaba jugando con el módulo dateutil
en Python 2.7.3. Simplemente quería usar:
import dateutil
dateutil.parser.parse("01-02-2013")
Pero tengo un error:
AttributeError: ''module'' object has no attribute ''parser''
Comprobé qué atributos tiene dateutil
:
print dir(dateutil)
# output: [''__author__'', ''__builtins__'', ''__doc__'', ''__file__'', ''__license__'',
# ''__name__'', ''__package__'', ''__path__'', ''__version__'']
El caso es que cuando intento importar el parser
directamente de dateutil
, parece existir:
from dateutil import parser
print parser.parse("01-02-2013")
# output: 2013-01-02 00:00:00
Después del from dateutil import parser
, el parser
también apareció mágicamente en el dateutil
importado:
print dir(dateutil)
# output: [''__author__'', ''__builtins__'', ''__doc__'', ''__file__'', ''__license__'',
# ''__name__'', ''__package__'', ''__path__'', ''__version__'', ''parser'',
# ''relativedelta'', ''tz'']
Tenga en cuenta que aún faltan algunos otros atributos (como rrule
) de esta lista.
¿Alguien sabe lo que está pasando?
No ha importado dateutil.parser
. Puedes verlo, pero de alguna manera debes importarlo.
>>> import dateutil.parser
>>> dateutil.parser.parse("01-02-2013")
datetime.datetime(2013, 1, 2, 0, 0)
Eso es porque el parser.py
es un módulo en el paquete dateutil
. Es un archivo separado en la estructura de la carpeta.
Responda a la pregunta que hizo en los comentarios, la razón por la cual relativedelta
y tz
aparecen en el espacio de nombres después from dateutil import parser
es porque el mismo parser
importa relativedelta
y tz
.
Si observa el código fuente de dateutil/parser.py
, puede ver las importaciones.
# -*- 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