Python: нет модуля с именем datetime?

56

ОС: Ubuntu 14.04 LTS

Python: 2.7.6

Моя установка Gourmet Recipe Manager внезапно перестала загружаться. Когда я запускаю его в окне терминала, в конце трассировки я получаю следующее:

import datetime as dt
ImportError: No module named datetime

Насколько я могу судить, ничего не изменилось, и моя установка Python обновлена. Это просто перестало работать вчера. Я, конечно, был бы признателен за хороший подход к диагностике и решению этой проблемы!

Обновление: спасибо всем, кто ответил!

Тим, извини, если я задал этот вопрос не в том месте. Пожалуйста, объясните, что вы новый парень, просто следуя ссылкам с сайта Ubuntu.

Шва, я попробовал ваше предложение и получил то же сообщение об ошибке, что и выше.

Муру, пакет, кажется, установлен, но я понятия не имею, правильно ли он установлен / настроен. Как я могу узнать?

Я прошу прощения за все вопросы, но я старый парень из RedHat, который некоторое время был вне Linux. Все вещи apt / dpkg являются новыми для меня.

Джо
источник
Хотя это (просто) по теме здесь, вы можете получить лучший ответ на переполнение стека . Кроме того, я не могу воспроизвести это. Никаких ошибок, в той же настройке, что и у вас ...
Тим
Что произойдет, если вы попробуете import datetimeв интерпретаторе Python? Вы можете запустить переводчик, открыв терминал и выполнив его python. Вы можете оставить это с Ctrl+d.
TheSchwa
По словам dpkg -S $(python -c "import datetime; print datetime.__file__"), модуль datetime из libpython2.7-stdlibпакета. Правильно ли установлен этот пакет? Можете ли вы попробовать переустановить его?
Муру
Итак, конкретный файл /usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.soу вас есть этот файл? Также вы видите в /usr/lib/python2.7/lib-dynloadсписке из echo $(python -c "import sys; print sys.path")? Кстати, система Stack Exchange фактически не уведомляет комментаторов при редактировании вашего сообщения; поэтому, по крайней мере, всегда оставляйте быстрый комментарий, такой как «Обновленный вопрос с информацией», чтобы мы получали уведомление с просьбой проверить ответ :)
TheSchwa
Обновленный вопрос с информацией. Спасибо, TheSchwa! Мои ответы - нет и да соответственно. Теперь, где я могу получить новую копию datetime.x86_64-linux.gnu.so? :)
Джо

Ответы:

84

Это случилось со мной после обновления 14.10, и, похоже, потому, что в моих виртуальных средах старые копии этого /usr/bin/python2.7, в отличие от нового двоичного файла, не содержат datetimeвстроенных, и поэтому появляется ошибка, когда они нигде не могут найти ее на диске. , Кажется, новый интерпретатор импортирует его без каких-либо файловых операций ввода / вывода (попробуйте запустить его straceдля проверки).

Я исправил каждую виртуальную среду, активировав ее и запустив:

$ cp /usr/bin/python2.7 $(which python2.7)
Брэндон Роудс
источник
5
Спасибо, но зачем это нужно? Взломать питона при апгрейде - это неприятно.
Саманта Аткинс
1
Я попробовал другие ответы на этой странице, и они не сработали, но этот сработал.
Майкл Терри
2
Есть, cp: '/usr/bin/python2.7' and '/usr/bin/python2.7' are the same fileно ошибка все еще существует
Umair
@ Umair Возможно, что-то не так с вашим activateскриптом, в этом случае - обычно после активации which python2.7он показывает путь к Python среды, а не возвращает путь к системному Python.
Брэндон Родс
29

Вы можете просто повторно инициализировать virtualenv:

cd $VIRTUAL_ENV
virtualenv .
sureshvv
источник
2
Обратите внимание, что это должно быть virtualenv .вместоvirtualenv ,
icyrock.com
4
Этот ответ кажется лучше, чем ответ Брэндона Роудса.
Азуркин
Если кто-то использует virtualenvwrapper, может это сделать cd $VIRTUAL_ENV.
Maciek
OSError: [Errno 1] Operation not permitted
Cerin
@Cerin, у меня была та же проблема, я просто использовал sudo virtualenv .для установки нового исполняемого файла Python, а затем изменил обратно целое $VIRTUAL_ENVна правильного владельца каталога.
iMitwe
29

Если вы пытаетесь использовать letsencrypt после обновления, это решение работает для меня на форумах letsencrypt - Невозможно использовать автоматический импорт: ошибка: нет модуля с именем io / 2345/3

Я просто должен был удалить это:

rm ~/.local/share/letsencrypt -R
Коди Мониз
источник
8
Я также должен был rm -rf /opt/eff.orgзаставить это работать
CharlyDelta
7
удаление /opt/eff.org исправлено
Маргус Пала
1
то же самое для меня ... /opt/eff.org
cljk
2

У меня возникла та же проблема, и я наконец решил, что это должен быть интерфейс командной строки AWS, потому что заметил, что у него есть собственный каталог python. Поэтому я удалил AWS CLI и переустановил его, и это решило проблему:

sudo pip uninstall awscli

sudo pip install awscli

JBaczuk
источник
0

Как я нашел некоторые изменения в 14.04, так что вам нужно сделать это от root:

Только для даты и времени:


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/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

Также, если вы используете виртуальную копию env

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

в вашу среду

Илья Шевырев
источник
3
Я обновился до 14.04 и мне не нужно было делать никаких ссылок. Не могли бы вы предоставить какие-либо доказательства того, что беспорядок в библиотеках системы такой, как это необходимо, и его нельзя избежать?
Андреа Лаззаротто
0

Я получил ошибку при обновлении с Ubuntu 14.04 до 14.10. Я воссоздал свой virtualenv, и проблема ушла. Так что если вы работаете с virtualenv, вы должны воссоздать его.

Однако, если вы этого не сделаете, я полагаю, что переустановка вашего проекта будет работать. Не прикасайтесь к системным библиотекам! Это может работать в настоящее время, но потенциально может привести к проблемам с другими.

Конец света
источник
0

Это происходит после некоторых обновлений Ubuntu. Мое любимое решение

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

Это обновляет все необходимое без удаления уже установленных пакетов.

Если вам нужно обновить virtualenv, вы можете использовать xargs:

$ ls ~/directory/with/virtualenvs | xargs -L1 virtualenv --no-site-packages
brandizzi
источник