Почему мой Python 2.6 не автоматически распаковывает файлы яиц при импорте? - PullRequest
1 голос
/ 02 сентября 2011

У меня сложилось впечатление, что импорт Python должен автоматически разархивировать файлы egg в пакетах сайта.

В моей установке не требуется автоматическое разархивирование яйца.Что я пробовал:

(1) Я использовал easy_install для установки модуля suds, который копировал файл egg в site-package.Python не может импортировать это.(import suds)

(2) Затем я использовал опцию --always-unzip для easy_install.На этот раз он дал мне каталог вместо zip-файла.Python все еще не может импортировать модуль suds.

(3) Я переименовал каталог suds.все еще не смог найти его.

(4) наконец я скопировал каталог suds из каталога unzipped egg в site-packags, и Python нашел его (неудивительно):

для меня, easy_install не было.Чего здесь не хватает?

Руфус

1 Ответ

1 голос
/ 02 сентября 2011

По умолчанию (если вы не указали режим мульти-версии), easy_install яйцо добавит запись в файл easy-install.pth в пакетах сайта.Проверьте там, чтобы видеть, есть ли ссылка на яйцо пены.Вы также можете проверить путь импорта Python (это список мест, в которых Python будет искать модули), например:

import sys
print sys.path

Вы пробовали import suds в оболочке Python, которая была запущена до того, как вы запустили easy_installed suds?Это объясняет поведение, которое вы видели.Файлы .pth читаются только при запуске Python, поэтому каталог egg или zip-файл не появился бы в sys.path.Копирование каталога suds изнутри каталога egg работало, потому что сам site-packages уже был в sys.path.Поэтому убедитесь, что вы перезапускаете Python после установки egg.

Python импортирует из zip-архивов, но не распаковывает архив в пакеты сайтов.То есть он не оставит распакованный каталог там после импорта.(Я думаю, что он читает из zip-файла на месте, не распаковывая его нигде в файловой системе.) Я видел проблемы, когда некоторые пакеты не работали как заархивированные яйца (они пытались прочитать данные из своего местоположения в файле.system), поэтому я бы рекомендовал всегда использовать флаг --always-unzip, как вы это делаете в (2).

Вы не указали командные строки, которые использовали.Вы указали опцию -m для easy_install?Это приведет к тому, что яйцо будет установлено в многоверсионном режиме.По умолчанию он не будет в sys.path, и вам нужно будет использовать функцию pkg_resources.require, прежде чем пытаться импортировать ее.

...