py2exe: почему некоторые стандартные модули НЕ включены? - PullRequest
3 голосов
/ 22 мая 2011

Моя программа на Python использует плагины (файлы Python), которые я динамически импортирую, используя __import__. Я связываю свою программу на Python в Windows exe, используя py2exe.

Я просто потратил 2 часа на поиск, почему мой файл Python плагина не мог быть загружен должным образом из версии .exe. Я получил ImportError: «нет модуля с именем urllib2» Оказалось, что мой плагин использовал urllib2 (через оператор import urllib2), и этот стандартный модуль библиотеки, по-видимому, не был включен в exe. Другие модули, используемые в плагине (re, urllib, ...), не создавали проблем, но, возможно, они уже были ссылками в файлах python, которые я статически включаю в свою программу.

Как узнать, какие стандартные модули библиотеки Python py2exe по умолчанию связывает в exe? (поэтому я знаю, могу ли я или кто-то еще использовать их в плагинах). Документация py2exe не дает подсказок, за исключением , говорящего , что он включает в себя множество модулей из стандартной библиотеки.

1 Ответ

4 голосов
/ 22 мая 2011

Чтобы увидеть, какие модули включены, загляните внутрь library.zip (если нет файла library.zip - затем попробуйте открыть EXE в любом приложении ZIP - или переименуйте его в .ZIP и попробуйте открыть его).

Вы сможете увидеть список * .pyc. Вы можете посмотреть список файлов и каталогов, чтобы получить представление о том, какие модули включены или нет.

Если вам требуется добавить определенный пакет, добавьте его в список «пакетов».

Что касается того, почему он не включает в себя все или как он выбирает включать одни, а не другие? Насколько я понимаю, py2exe просматривает ваш код, чтобы выяснить, что вы используете, и включает в себя те (и некоторые, которые ему, вероятно, нужны), но, возможно, он также имеет некоторую эвристику для добавления других модулей (я не проверял:)

...