У меня возникла проблема с распространением приложения, которое использует pytz. Я использую Py2Exe, чтобы создать исполняемый файл из моего источника Python.UnknownTimezoneError Exception, созданный с помощью приложения Python, составленного с Py2Exe
Для простого примера проблема, у меня, у меня есть: pytz_test.py:
import pytz
tz_au = pytz.timezone("Australia/Sydney")
print tz_au
и в setup.py:
from distutils.core import setup
import py2exe
setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })
тогда я бегу setup.py :
python setup.py py2exe
Что скомпилирует исполняемый файл. Запуск созданного pytz_test.exe я получаю:
Я предполагаю, что это потому, что информация о часовом поясе не получает в комплекте с исполняемым файлом, но я не знаю, как это произошло.
EDIT: простое решение было бы добавить каталог ZoneInfo, из pytz модуля в каталоге сайта-пакетов питона, к library.zip.
Чтобы сделать это автоматически, я последовал за решение в этом проекте-канал Google Transit Data используется, начиная с: http://code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.py
Мой модифицированный setup.py теперь выглядит следующим образом:
from distutils.core import setup
import glob
import py2exe
options = {
"py2exe" : {
"compressed": 1,
"optimize": 2,
'packages': ['pytz'],
}
}
setup(console=['pytz_test.py'], options=options)
import pytz
import os
import zipfile
zipfile_path = os.path.join("dist/" 'library.zip')
z = zipfile.ZipFile(zipfile_path, 'a')
zoneinfo_dir = os.path.join(os.path.dirname(pytz.__file__), 'zoneinfo')
disk_basedir = os.path.dirname(os.path.dirname(pytz.__file__))
for absdir, directories, filenames in os.walk(zoneinfo_dir):
assert absdir.startswith(disk_basedir), (absdir, disk_basedir)
zip_dir = absdir[len(disk_basedir):]
for f in filenames:
z.write(os.path.join(absdir, f), os.path.join(zip_dir, f))
z.close()
Вам также нужна текущая версия setuptools. В частности, pkg_resources. «Импорт pkg_resources» не должен прерываться. – sbaechler
Где именно используется 'pkg_resources'? или просто импортируя его? – Triztian