System operacyjny: Ubuntu 14.04 LTS
Python: 2.7.6
Moja instalacja Gourmet Recipe Manager nagle przestała się ładować. Po uruchomieniu w oknie terminala na końcu śledzenia pojawia się następujący komunikat:
import datetime as dt
ImportError: No module named datetime
O ile wiem, nic się nie zmieniło, a moja instalacja w Pythonie jest aktualna. Po prostu przestało działać wczoraj. Z pewnością docenię dobre podejście do diagnozowania i rozwiązywania tego problemu!
Aktualizacja: dziękuję wszystkim, którzy odpowiedzieli!
Tim, przepraszam, jeśli zadałem to pytanie w niewłaściwym miejscu. Wykreśl to, że jesteś nowym facetem, który po prostu korzysta z linków z witryny Ubuntu.
TheSchwa, próbowałem twojej sugestii i otrzymałem taki sam komunikat o błędzie jak powyżej.
muru, pakiet wydaje się być zainstalowany, ale nie mam pojęcia, czy jest poprawnie zainstalowany / skonfigurowany. Jak mogę się dowiedzieć?
Przepraszam za wszystkie pytania, ale jestem starym facetem RedHata, który od dłuższego czasu nie ma Linuksa. Wszystkie rzeczy apt / dpkg są dla mnie nowe.
import datetime
w interprecie Pythona? Możesz uruchomić tłumacza, otwierając terminal i wykonując poleceniepython
. Możesz to zostawićCtrl+d
.dpkg -S $(python -c "import datetime; print datetime.__file__")
tym moduł datetime pochodzi zlibpython2.7-stdlib
pakietu. Czy ten pakiet jest poprawnie zainstalowany? Czy możesz spróbować zainstalować ponownie?/usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so
ten plik? Czy widzisz również/usr/lib/python2.7/lib-dynload
wymienione w danych wyjściowych zecho $(python -c "import sys; print sys.path")
? Btw system wymiany stosów tak naprawdę nie powiadamia komentujących podczas edytowania postu; więc przynajmniej zawsze publikuj szybki komentarz, taki jak „Zaktualizowałem pytanie o informacje”, abyśmy otrzymali powiadomienie zOdpowiedzi:
Zdarzyło mi się to po aktualizacji 14.10 i wydaje się, że
/usr/bin/python2.7
dzieje się tak, ponieważ moje środowiska wirtualne mają stare kopie tego - w przeciwieństwie do nowegodatetime
pliku binarnego - nie zawierają wbudowanego, a więc pojawia się błąd, gdy nie można go nigdzie znaleźć na dysku . Nowy interpreter wydaje się importować go bez żadnych operacji we / wy pliku (spróbuj uruchomić go pod,strace
aby to sprawdzić).Naprawiłem każde wirtualne środowisko, aktywując je i uruchamiając:
źródło
cp: '/usr/bin/python2.7' and '/usr/bin/python2.7' are the same file
ale błąd nadal występujeactivate
skryptem - zwykle po aktywacjiwhich python2.7
pokaże ścieżkę do środowiska Python, a nie zwróci ścieżkę do systemowego Python.Możesz ponownie zainicjować virtualenv poprzez:
źródło
virtualenv .
zamiastvirtualenv ,
cd $VIRTUAL_ENV
.OSError: [Errno 1] Operation not permitted
sudo virtualenv .
aby zainstalować nowy plik wykonywalny Pythona, a następnie zmieniłem całość z powrotem$VIRTUAL_ENV
na poprawnego właściciela katalogu.Jeśli próbujesz użyć letsencrypt po aktualizacji, to rozwiązanie działało dla mnie forum letsencrypt - Nie można użyć automatycznego importu: błąd: brak modułu o nazwie io / 2345/3
Musiałem tylko to usunąć:
źródło
rm -rf /opt/eff.org
sprawić, żeby to działałoMiałem ten sam problem i ostatecznie zdecydowałem, że musi to być interfejs AWS CLI, ponieważ zauważyłem, że ma on własny katalog python. Więc odinstalowałem interfejs AWS CLI i ponownie go zainstalowałem, co rozwiązało problem:
sudo pip uninstall awscli
sudo pip install awscli
źródło
Jak znalazłem pewne zmiany w 14.04, więc musisz to zrobić z poziomu roota:
Tylko dla datetime:
Dla wszystkich modułów:
Również jeśli używasz wirtualnej kopii env
do twojego środowiska
źródło
Wystąpił błąd podczas aktualizacji z Ubuntu 14.04 do 14.10. Odtworzyłem mój virtualenv i problem zniknął. Więc jeśli pracujesz z virtualenv, powinieneś go ponownie utworzyć.
Jeśli jednak tego nie zrobisz, przypuszczam, że ponowna instalacja projektu będzie działać. Nie dotykaj żadnych bibliotek systemowych! Może na razie działać, ale potencjalnie może prowadzić do problemów z innymi.
źródło
Dzieje się tak po niektórych aktualizacjach Ubuntu. Moje ulubione rozwiązanie to
To aktualizuje wszystko, co potrzebne, bez usuwania już zainstalowanych pakietów.
Jeśli masz wiele wirtualnych aktualizacji, możesz użyć
xargs
:źródło