Python не может найти dateutil.relativedelta

Я пытаюсь запустить программу, используя paster serve, но постоянно получаю сообщение об ошибке:

ImportError: нет модуля с именем dateutil.relativedelta

Я использую Python версии 2.6.7 и dateutil версии 1.5, поэтому он должен быть установлен.

У кого-нибудь есть идеи, почему это произойдет?

Я импортирую с помощью

from dateutil.relativedelta import *

Я даже вижу пакет, когда ищу:

/usr/lib/python2.7/site-packages/dateutil/relativedelta.pyc
/usr/lib/python2.7/site-packages/dateutil/relativedelta.py
/usr/lib/python2.7/site-packages/dateutil/relativedelta.pyo

ОБНОВИТЬ

Сразу же я смотрю на это и вижу, что dateutil установлен только для Python 2.7, и держу пари, что я делал следующее:

sudo yum install python-dateutil

На что sudo пришлось бы переключиться на версию Python по умолчанию (т. е. Python 2.7 вместо 2.6.4).

Решить это было бы так же просто, как:

su
(switch to virtual environment)
yum install python-dateutil

Использование su и последующее переключение на виртуальную среду предоставит корневой доступ и установку в виртуальный каталог Python. Использование sudo приведет к установке библиотек в каталог по умолчанию, а не в пакеты сайтов виртуальных сред.


person RonnyKnoxville    schedule 07.12.2011    source источник
comment
Какую линию импорта вы используете?   -  person thegrinner    schedule 07.12.2011
comment
эээ, вы уверены, что это работает? rpm обычно не знает о виртуальных средах. Если вы не получаете python-dateutil из очень необычного rpm из нестандартного репозитория Fedora, установка пакета python скопирует файлы в одно и то же место независимо от вашей виртуальной среды. С другой стороны, получение root (или нет) и использование pip или любого другого инструмента для упаковки Python должно устанавливаться в нужном месте. На самом деле, большинство RPM используют этот механизм; но на этапе сборки, т.е. сопровождающим пакета.   -  person SingleNegationElimination    schedule 14.10.2012


Ответы (4)


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

Итак, если у вас есть эта проблема, попробуйте следующее:

sudo pip install python-dateutil --upgrade

Это не может повредить чему-либо, поэтому нет ничего плохого в том, чтобы просто заставить его переустановить.

person Jon    schedule 14.10.2012
comment
Я получил эту ошибку после ручного обновления моего python на Mac (OS X 10.7.5) с 2.7.1 до 2.7.3, и это решение сработало для меня. Я предполагаю, что комментарий от Sujit Pal намекает на то, почему проблема возникла после обновления - возможно, есть изменение в расположении пути к библиотеке для этого модуля. - person Mark Chackerian; 23.01.2013
comment
просто убедитесь, что правильная версия, например. используйте 1.5 для python 2.x: sudo pip install python-dateutil == 1.5 - person Xiaofeng Tang; 10.12.2013
comment
Работал на меня. Не знаю, почему, потому что без флага --upgrade он сказал, что он уже установлен, поэтому не уверен, почему он сказал, что он не найден, когда на самом деле версия слишком старая. Спасибо. - person Eduard Luca; 14.05.2014

У меня была аналогичная проблема, но по более простой причине. В моем новом virtualenv просто не было установлено dateutil, и я не знал имени пакета Python. Я попробовал pip install dateutil, что, очевидно, не сработало, поскольку имя пакета было неправильным. Запуск pip install python-dateutil вместо этого сработал (не прибегая к sudo).

person lofidevops    schedule 04.09.2013

Это похоже на проблему установки пакета для меня. Список устранения неполадок, который приходит мне на ум:

  1. Убедитесь, что вы установили пакет.
  2. Если установлены, убедитесь, что файлы были сохранены в правильном каталоге (каталог, доступный из вашего интерпретатора Python (= в PYTHONPATH, полезная статья здесь).
  3. Проверьте разрешение на эти файлы.
  4. Перезапустите оболочку, если вы пытались импортировать туда.
  5. Перезагрузите компьютер (ой... прошло 10 лет с тех пор, как я начал использовать GNU/Linux, но я до сих пор страдаю от плохих воспоминаний о Windows! ;)
person mac    schedule 07.12.2011

(Мне помог предыдущий комментарий об установке python-dateutil, так что, возможно, мой комментарий поможет кому-то еще).

Для пользователей Mac OS (v10.6 (Snow Leopard); я не уверен в других версии), пакет dateutils по умолчанию расположен по адресу:

/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/dateutil

тогда как pip install записывает пакет в:

/Library/Python/2.6/site-packages

и не обновляет файл /Library/Python/2.6/site-packages/easy-install.pth. В результате при импорте dateutil вы все равно будете указывать на старое местоположение, проверить это можно по "import dateutil; dateutil.__file__".

Итак, что я сделал (вероятно, доступны лучшие методы), так это переименовал старый каталог (/System/Library/.../dateutil) в dateutil.obsolete и перезапустил Python, а затем снова запустил тот же набор команд. Это ничего не делает с файлом пути или sys.path, но пропускает старый пакет dateutils, чтобы вы могли перейти к новому.

person Sujit Pal    schedule 19.01.2013