Python: ¿ningún módulo llamado datetime?


56

SO: Ubuntu 14.04 LTS

Python: 2.7.6

Mi instalación de Gourmet Recipe Manager de repente dejó de cargarse. Cuando lo ejecuto en una ventana de terminal, obtengo lo siguiente al final del rastreo:

import datetime as dt
ImportError: No module named datetime

Hasta donde puedo decir, nada ha cambiado y mi instalación de Python está actualizada. Simplemente dejó de funcionar ayer. ¡Sin duda agradecería un buen enfoque para diagnosticar y solucionar este problema!

Actualización: gracias a todos los que respondieron!

Tim, lo siento si hice esta pregunta en el lugar equivocado. Tíralo como un chico nuevo simplemente siguiendo los enlaces del sitio web de Ubuntu.

TheSchwa, probé tu sugerencia y recibí el mismo mensaje de error que el anterior.

muru, el paquete parece estar instalado, pero no tengo idea si está instalado / configurado correctamente. ¿Cómo podría averiguarlo?

Lamento todas las preguntas, pero soy un viejo tipo de RedHat que ha estado alejado de Linux por algún tiempo. Todas las cosas de apt / dpkg son nuevas para mí.


Si bien esto es (solo) sobre el tema aquí, es posible que obtenga una mejor respuesta en Stack Overflow . Además, no puedo reproducirlo. Sin errores en absoluto, en la misma configuración que usted ...
Tim

¿Qué sucede si intentas import datetimeen el intérprete de Python? Puede iniciar el intérprete abriendo un terminal y ejecutándolo python. Puedes dejarlo con Ctrl+d.
TheSchwa

Según dpkg -S $(python -c "import datetime; print datetime.__file__"), el módulo de fecha y hora es del libpython2.7-stdlibpaquete. ¿Está ese paquete instalado correctamente? ¿Puedes intentar reinstalarlo?
muru

Bien, entonces el archivo específico es /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so¿tienes ese archivo? ¿También ves /usr/lib/python2.7/lib-dynloadlistado en la salida de echo $(python -c "import sys; print sys.path")? Por cierto, el sistema Stack Exchange no notifica a los comentaristas cuando editas tu publicación; así que al menos siempre publique un comentario rápido como "Pregunta actualizada con la información" para que recibamos una notificación que nos diga que
revisemos

Pregunta actualizada con la información. Gracias, TheSchwa! Mis respuestas son no y sí, respectivamente. Ahora, ¿dónde puedo obtener una nueva copia de datetime.x86_64-linux.gnu.so? :)
Joe

Respuestas:


84

Esto me sucedió después de la actualización 14.10, y parece ser porque mis entornos virtuales tienen copias antiguas de /usr/bin/python2.7eso, a diferencia del nuevo binario, no incluyen datetimeincorporado, por lo que recibo un error cuando no pueden encontrarlo en el disco en ninguna parte . El nuevo intérprete parece importarlo sin ninguna E / S de archivo (intente ejecutarlo stracepara verificar).

Arreglé cada entorno virtual activándolo y ejecutando:

$ cp /usr/bin/python2.7 $(which python2.7)

55
Gracias pero ¿por qué es esto necesario? Romper Python en una actualización es algo desagradable.
Samantha Atkins

1
Intenté las otras respuestas en esta página y no funcionaron, pero esta sí.
Michael Terry

2
Consiguió cp: '/usr/bin/python2.7' and '/usr/bin/python2.7' are the same file, pero todavía existe el error
Umair

@Umair Puede haber algo mal con su activatescript, en ese caso, normalmente, después de la activación, which python2.7mostrará la ruta al Python del entorno, no devolverá la ruta al Python del sistema.
Brandon Rhodes

29

Puede reiniciar el virtualenv de la siguiente manera:

cd $VIRTUAL_ENV
virtualenv .

2
Tenga en cuenta que debería ser en virtualenv .lugar devirtualenv ,
icyrock.com

44
Esta respuesta parece mejor que la de Brandon Rhodes.
azurkin

Si uno usa el virtualenvwrapper puede hacer cd $VIRTUAL_ENV.
maciek

OSError: [Errno 1] Operation not permitted
Cerin

@Cerin, tuve el mismo problema, simplemente utilicé una sudo virtualenv .para instalar el nuevo ejecutable de Python y luego volví a cambiar todo $VIRTUAL_ENVal propietario del directorio correcto.
iMitwe


2

Tuve el mismo problema y finalmente decidí que debía ser la AWS CLI porque noté que tenía su propio directorio de Python. Así que desinstalé AWS CLI y lo reinstalé y eso solucionó el problema:

sudo pip uninstall awscli

sudo pip install awscli


0

Como encontré algunos cambios en 14.04, debes hacer esto desde la raíz:

Solo para fecha y hora:


ln -s /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/datetime.so

Para todos los módulos:


ln -s /usr/lib/python2.7/lib-dynload/audioop.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/audioop.so
ln -s /usr/lib/python2.7/lib-dynload/_bsddb.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/_bsddb.so
ln -s /usr/lib/python2.7/lib-dynload/bz2.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/bz2.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_cn.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_cn.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_hk.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_hk.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_iso2022.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/_codecs_iso2022.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_jp.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_jp.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_kr.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_kr.so
ln -s /usr/lib/python2.7/lib-dynload/_codecs_tw.x86_64-linux-gnu.so                    /usr/lib/python2.7/lib-dynload/_codecs_tw.so
ln -s /usr/lib/python2.7/lib-dynload/crypt.x86_64-linux-gnu.so                         /usr/lib/python2.7/lib-dynload/crypt.so
ln -s /usr/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/_csv.so
ln -s /usr/lib/python2.7/lib-dynload/_ctypes_test.x86_64-linux-gnu.so                  /usr/lib/python2.7/lib-dynload/_ctypes_test.so
ln -s /usr/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_ctypes.so
ln -s /usr/lib/python2.7/lib-dynload/_curses_panel.x86_64-linux-gnu.so                 /usr/lib/python2.7/lib-dynload/_curses_panel.so
ln -s /usr/lib/python2.7/lib-dynload/_curses.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_curses.so
ln -s /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/datetime.so
ln -s /usr/lib/python2.7/lib-dynload/dbm.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/dbm.so
ln -s /usr/lib/python2.7/lib-dynload/_elementtree.x86_64-linux-gnu.so                  /usr/lib/python2.7/lib-dynload/_elementtree.so
ln -s /usr/lib/python2.7/lib-dynload/fpectl.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/fpectl.so
ln -s /usr/lib/python2.7/lib-dynload/future_builtins.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/future_builtins.so
ln -s /usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_hashlib.so
ln -s /usr/lib/python2.7/lib-dynload/_hotshot.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_hotshot.so
ln -s /usr/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so                         /usr/lib/python2.7/lib-dynload/_json.so
ln -s /usr/lib/python2.7/lib-dynload/linuxaudiodev.x86_64-linux-gnu.so                 /usr/lib/python2.7/lib-dynload/linuxaudiodev.so
ln -s /usr/lib/python2.7/lib-dynload/_lsprof.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/_lsprof.so
ln -s /usr/lib/python2.7/lib-dynload/mmap.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/mmap.so
ln -s /usr/lib/python2.7/lib-dynload/_multibytecodec.x86_64-linux-gnu.so               /usr/lib/python2.7/lib-dynload/_multibytecodec.so
ln -s /usr/lib/python2.7/lib-dynload/_multiprocessing.x86_64-linux-gnu.so              /usr/lib/python2.7/lib-dynload/_multiprocessing.so
ln -s /usr/lib/python2.7/lib-dynload/nis.x86_64-linux-gnu.so                           /usr/lib/python2.7/lib-dynload/nis.so
ln -s /usr/lib/python2.7/lib-dynload/ossaudiodev.x86_64-linux-gnu.so                   /usr/lib/python2.7/lib-dynload/ossaudiodev.so
ln -s /usr/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so                        /usr/lib/python2.7/lib-dynload/parser.so
ln -s /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/pyexpat.so
ln -s /usr/lib/python2.7/lib-dynload/readline.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/readline.so
ln -s /usr/lib/python2.7/lib-dynload/resource.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/resource.so
ln -s /usr/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so                      /usr/lib/python2.7/lib-dynload/_sqlite3.so
ln -s /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so                          /usr/lib/python2.7/lib-dynload/_ssl.so
ln -s /usr/lib/python2.7/lib-dynload/termios.x86_64-linux-gnu.so                       /usr/lib/python2.7/lib-dynload/termios.so
ln -s /usr/lib/python2.7/lib-dynload/_testcapi.x86_64-linux-gnu.so                     /usr/lib/python2.7/lib-dynload/_testcapi.so

Además, si usa copia virtual env

cp $(which python2.7) /opt/graphite/bin/python

a tu env


3
Actualicé a 14.04 y no necesité hacer ningún enlace simbólico. ¿Podrías proporcionar alguna evidencia de que dañar las bibliotecas del sistema de esta manera es necesario y no se puede evitar?
Andrea Lazzarotto

0

Recibí el error cuando actualicé de Ubuntu 14.04 a 14.10. Recreé mi virtualenv y el problema desapareció. Entonces, si está trabajando con un virtualenv, debe recrearlo.

Sin embargo, si no lo hace, supongo que reinstalar su proyecto funcionará. ¡No toques ninguna biblioteca del sistema! Puede funcionar por el momento, pero potencialmente generará problemas con otros.


0

Esto sucede después de algunas actualizaciones de Ubuntu. Mi solucion favorita es

$ virtualenv --no-site-packages path/to/virtualenv/dir

Esto actualiza todo lo necesario sin eliminar los paquetes ya instalados.

Si tiene muchos virtualenvs para actualizar, puede usar xargs:

$ ls ~/directory/with/virtualenvs | xargs -L1 virtualenv --no-site-packages
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.