cxFreeze и Jaraco: ошибка импорта

#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, я бы предположил, что это та же проблема. Я надеюсь, что это решение сработает для пользователей, столкнувшихся с той же проблемой:

  1. В вашем каталоге ‘site-packages’, в пакете ‘jaraco’, добавьте файл ‘init.py’. Он может быть пустым. Почему это не предусмотрено, я понятия не имею. Пакет без «init.py» для cxFreeze не является пакетом.
  2. Повторно запустите ‘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,