#python #cx-freeze
#python #cx-замораживание
Вопрос:
Я пытаюсь создать IRC-клиент, используя библиотеку irclib. Однако, когда я пытаюсь заморозить скрипт с помощью cxFreeze, я всегда сталкиваюсь с этой ошибкой:
Traceback (most recent call last):
File "C:python27libsite-packagescx_FreezeinitscriptsConsole.py", line 27, in <module>
exec(code, m.__dict__)
File "client.py", line 38, in <module>
ImportError: No module named jaraco
В setup.py скрипт был изменен несколько раз, чтобы попытаться включить файлы, пакеты и так далее. Кажется, ничего не работает. Вот текущая версия для справки:
from cx_Freeze import setup, Executable
client = Executable(
script="client.py",
base="Win32GUI",
)
setup(
name = "client",
version = "0.2",
description = "client",
options = {'build_exe': {'includes': ["jaraco"], "packages": ["jaraco"]}},
executables = [client],
)
Скрипт клиента может быть сокращен на одну строку:
from irc import client
Вот и все. Я не использую Jaraco, есть irclib (пакет irc). Jaraco, должно быть, был установлен как зависимость от irclib.
Я пытался найти причины, по которым это могло произойти, но пока ничего не найдено.
Спасибо за вашу помощь!
Комментарии:
1. Можете ли вы предоставить скрипт client.py ? И какую версию этого jaraco вы используете?
2. @Tuininga: Я всего лишь импортирую irc (я отредактировал сообщение). Я не использую Jaraco, но irclib использует. Я предполагаю, что это рассматривалось как зависимость, когда я устанавливал irclib.
Ответ №1:
Что ж, после некоторого изучения, похоже, та же проблема существует с zope при замораживании приложения с помощью twisted. Хотя я не тестировал это с jaraco, я бы предположил, что это та же проблема. Я надеюсь, что это решение сработает для пользователей, столкнувшихся с той же проблемой:
- В вашем каталоге ‘site-packages’, в пакете ‘jaraco’, добавьте файл ‘init.py’. Он может быть пустым. Почему это не предусмотрено, я понятия не имею. Пакет без «init.py» для cxFreeze не является пакетом.
- Повторно запустите ‘setup.py ‘ скрипт. Не включайте ‘jaraco’ в качестве пакета, предоставьте пакет, которому это необходимо (здесь это было бы ‘irc’).
Вот setup.py скрипт:
from cx_Freeze import setup, Executable
client = Executable(
script="client.py",
base="Win32GUI",
)
setup(
name = "client",
version = "0.2",
description = "client",
options = {'build_exe': {'packages': ["irc"]}},
executables = [client],
)
Я предоставляю этот ответ, потому что он отлично работал с twisted и zope. Видя, что мой клиент теперь использует twisted для своей IRC-связи, я не знаю, работают ли приведенные ниже шаги, но это то, что помогло мне для twisted.
HTH,