Учитывая имя пакета Python, каково имя модуля для импорта?

Кто-нибудь знает логику имен модулей Python и имя фактического пакета, используемого в easy_install?

Несколько (среди прочих) примеров, которые кажутся мне немного нелогичными:

  • Мы делаем easy_install mysql-python, но импорт фактически import MySQLdb
  • Мы делаем easy_install python-memcached, но импорт фактически import memcache (без конечного d)

Я не нашел последовательного способа найти эквивалентность. Для некоторых модулей мне потребовалось много времени, чтобы найти его. Что я делаю неправильно?

Ответ 1

К сожалению, нет никакого способа безумия. Имя в индекс пакета не зависит от имени модуля import. Катастрофа некоторые пакеты разделяют имена модулей. Если вы установите оба варианта, ваше приложение будет разорваться с равными шансами. (Ruby тоже имеет эту проблему)


Упаковка в Python, как правило, ужасная. Основной причиной является то, что язык отправляется без менеджера пакетов. Ruby и Nodejs поставляются с полнофункциональными менеджерами пакетов Gem и Npm, а также развивают совлокальные сообщества, сосредоточенные вокруг GitHub. Npm делает публикацию пакетов так же просто, как и их установку. Nodejs прибыли в 2009 году и уже 14k пакетов. Почтенный индекс пакета Python содержит список 24k. Ruby Gems перечисляет 44 тыс. Пакетов.

К счастью, есть один достойный менеджер пакетов для Python, называемый Pip. Пип вдохновлен Ruby Gem, но ему не хватает некоторых важных функций (например, листинг пакетов и обновление en mass). Как ни странно, сам Pip сложный для установки. Установка на популярной 64-битной Windows требует создания и установки двух пакетов из исходного кода. Это большая просьба к любому новому программированию.

Разработчики Python не знают об этом разочаровании, потому что они являются опытными программистами, удобными для создания из источника, и используют Linux-дистрибутивы с упакованными модулями Python.

До тех пор, пока Python не отправится с менеджером пакетов, тысячи разработчиков не понапрасну будут тратить время на создание колеса.


Python 3 решает много проблем с упаковкой. Там не являются пакетами для Python 3.