ImportError: невозможно импортировать имя издателя - PullRequest
9 голосов
/ 21 марта 2011

Я успешно создал исполняемую версию (Py2exe, Pyinstaller) моего приложения. Когда я пытаюсь запустить приложение из .exe, я получаю сообщение об ошибке в файле журнала:

Traceback (most recent call last): File "CreateAS.pyw", line 8, in <module> ImportError: cannot import name Publisher

Я действительно застрял в этой части. Не могли бы вы помочь мне?

Спасибо

Ответы [ 3 ]

13 голосов
/ 05 мая 2011

Я предполагаю, что вы используете версию wxPython , то есть >= 2.8.11.0? Если это так, пакет wx.lib.pubsub изменился. Эта страница описывает изменения. В списке рассылки wxPython есть , где говорится об этом.

Чтобы все это работало в моем проекте, я сделал следующее, описанное здесь , которое было частью вышеупомянутой ветки списка рассылки. Резюмирую ниже:

Наиболее предпочтительная альтернатива (т.е. нет взломать!) если вы можете взломать его (извините!) должен использовать тот же протокол обмена сообщениями как v1, но в последнем API это называется "arg1":

# only in app's startup  module   
from wx.lib.pubsub import setuparg1   
# in all modules that use pubsub 
from wx.lib.pubsub import pub as Publisher

и заменить любой случай "Publisher()." by "Publisher."

Затем в моем скрипте setup.py мне пришлось добавить следующее к опциям:

options = {
    "py2exe": {"packages": ['wx.lib.pubsub']}
}
setup(data_files=data_files,
      windows=[
              {'script': 'btpos.py'],
               options=options)

Теперь вы сможете создавать исполняемый файл, используя новую версию pubsub, но со старым API. Вы также можете попробовать новый API v3 Pubsub. Если ваш проект не слишком большой, вы можете обойтись без особых изменений.

4 голосов
/ 04 февраля 2015

попробуй так:

from wx.lib.pubsub import setuparg1
from wx.lib.pubsub import pub as Publisher

Затем: замените любое вхождение Publisher() на Publisher.

2 голосов
/ 02 декабря 2016

Я использовал пример кода, который использовал wx.lib.pubsub для изучения, и тоже столкнулся с этой проблемой.

Чтобы исправить эту проблему, я просто изменил строку:

from wx.lib.pubsub import Publisher as pub

Кому:

from wx.lib.pubsub import pub

В принятых ответах есть ссылки, которые все еще делают его правильным, но для простоты я добавил это решение, потому что принятое решение было немного запутанным.

...