Python: nenhum módulo chamado datetime?


56

Sistema operacional: Ubuntu 14.04 LTS

Python: 2.7.6

Minha instalação do Gourmet Recipe Manager parou de repente. Quando o executo em uma janela de terminal, recebo o seguinte no final do rastreamento:

import datetime as dt
ImportError: No module named datetime

Até onde eu sei, nada foi alterado e minha instalação do Python está atualizada. Simplesmente parou de trabalhar ontem. Eu certamente apreciaria uma boa abordagem para diagnosticar e corrigir esse problema!

Atualização: obrigado a todos que responderam!

Tim, desculpe se fiz esta pergunta no lugar errado. Por favor, considere ser um cara novo simplesmente seguindo os links do site do Ubuntu.

TheSchwa, tentei sua sugestão e recebi a mesma mensagem de erro acima.

muru, o pacote parece estar instalado, mas não faço ideia se está instalado / configurado corretamente. Como posso descobrir?

Sinto muito por todas as perguntas, mas sou um velho RedHat que está longe do Linux há algum tempo. Todo o material do apt / dpkg é novo para mim.


Enquanto isso estiver (apenas) no tópico aqui, você poderá obter uma resposta melhor no Stack Overflow . Além disso, não posso reproduzi-lo. Sem erros em tudo, no mesmo set-up como você ...
Tim

O que acontece se você tentar import datetimeno interpretador python? Você pode iniciar o intérprete abrindo um terminal e executando python. Você pode deixar com isso Ctrl+d.
precisa saber é o seguinte

De acordo com dpkg -S $(python -c "import datetime; print datetime.__file__"), o módulo datetime é do libpython2.7-stdlibpacote. Esse pacote está instalado corretamente? Você pode tentar reinstalá-lo?
Muru

Ok, então o arquivo específico é: /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.sovocê tem esse arquivo? Você também vê /usr/lib/python2.7/lib-dynloadlistado na saída de echo $(python -c "import sys; print sys.path")? Na verdade, o sistema Stack Exchange não notifica os comentaristas quando você edita sua postagem; assim pelo menos sempre postar um comentário rápido como "questão atualizado com a informação" para que receber uma notificação dizendo que volte :)
TheSchwa

Pergunta atualizada com as informações. Obrigado, TheSchwa! Minhas respostas são não e sim, respectivamente. Agora, onde posso obter uma nova cópia do datetime.x86_64-linux.gnu.so? :)
Joe

Respostas:


84

Isso aconteceu comigo após a atualização 14.10, e parece que meus ambientes virtuais têm cópias antigas /usr/bin/python2.7disso - diferentemente do novo binário - não incluem datetimebuilt-in e, portanto, recebem um erro quando não conseguem encontrá-lo em disco em nenhum lugar . O novo intérprete parece importá-lo sem nenhuma E / S de arquivo (tente executá-lo stracepara verificar).

Corrigi cada ambiente virtual ativando-o e executando:

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

5
Obrigado, mas por que isso é necessário? Quebrar python em uma atualização é algo desagradável.
Samantha Atkins

1
Tentei as outras respostas desta página e elas não funcionaram, mas esta funcionou.
Michael Terry

2
Obteve, cp: '/usr/bin/python2.7' and '/usr/bin/python2.7' are the same filemas o erro ainda existe
Umair

@Umair Pode haver algo errado com o seu activatescript, nesse caso - normalmente, após a ativação, which python2.7mostrará o caminho para o Python do ambiente, não retornará o caminho para o sistema Python.
Brandon Rhodes

29

Você pode apenas reinicializar o virtualenv:

cd $VIRTUAL_ENV
virtualenv .

2
Note que deveria ser ao virtualenv .invés devirtualenv ,
icyrock.com 12/12

4
Essa resposta parece melhor que a de Brandon Rhodes.
21915 azurkin

Se alguém usa o virtualenvwrapper pode fazer cd $VIRTUAL_ENV.
11276 Mackiek #

OSError: [Errno 1] Operation not permitted
Cerin

@ Cerin, eu tive o mesmo problema, eu apenas usei um sudo virtualenv .para instalar o novo executável Python e depois mudei de volta o todo $VIRTUAL_ENVpara o proprietário do diretório correto.
iMitwe em 30/04


2

Eu tive o mesmo problema e finalmente decidi que deveria ser a CLI da AWS porque notei que ela tinha seu próprio diretório python. Desinstalei o AWS CLI e reinstalei-o, corrigindo o problema:

sudo pip uninstall awscli

sudo pip install awscli


0

Como eu encontrei algumas mudanças no 14.04, você precisa fazer isso a partir do root:

Somente para data e 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 os 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

Além disso, se você usar uma cópia de ambiente virtual

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

ao seu env.


3
Atualizei para 14.04 e não precisava fazer nenhum link simbólico. Você poderia fornecer alguma evidência de que bagunçar as bibliotecas do sistema dessa maneira é necessária e não pode ser evitada?
Andrea Lazzarotto

0

Eu recebi o erro quando atualizei do Ubuntu 14.04 para 14.10. Recriei meu virtualenv e o problema foi resolvido. Portanto, se você estiver trabalhando com um virtualenv, recrie-o.

No entanto, se não, suponho que a reinstalação do seu projeto funcione. Não toque em nenhuma biblioteca do sistema! Pode funcionar por enquanto, mas potencialmente levará a problemas com outras pessoas.


0

Isso acontece após algumas atualizações do Ubuntu. Minha solução favorita é

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

Isso atualiza tudo o que é necessário sem remover os pacotes já instalados.

Se você tiver muitos virtualenvs para atualizar, poderá usar xargs:

$ ls ~/directory/with/virtualenvs | xargs -L1 virtualenv --no-site-packages
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.