2011-03-21 2 views
8

J'ai créé avec succès une version exécutable (Py2exe, Pyinstaller) de mon application. Lorsque je tente de lancer l'application à partir .exe, je reçois une erreur comme suit dans le fichier journal:ImportError: impossible d'importer le nom Publisher

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

Je suis vraiment coincé dans cette partie. Pourrais-tu m'aider?

Merci

+2

L'exception [NoSectionError] (http://docs.python.org/library/configparser.html#ConfigParser.NoSectionError) est déclenchée lorsqu'une section est introuvable. Avez-vous confirmé que vous avez une section appelée «emplacements»? – user225312

+0

J'ai résolu ce problème en intégrant du code lié à la pâte dans mon module principal .pyw. Donc, il n'y a qu'un seul module python maintenant. Mais cette fois, j'ai une nouvelle erreur comme expliqué ci-dessus. – Shansal

+2

Veuillez décrire comment vous avez importé '' Publisher'' de '' CreateAS.pyw'', où se trouve '' Publisher'' et quelle est son utilisation. –

Répondre

12

Je devine que vous utilisez une version de wxPython qui est >= 2.8.11.0? Si c'est le cas, le package wx.lib.pubsub a été modifié. This page décrit les modifications. Il ya aussi un fil sur la liste de diffusion wxPythonhere qui parle de cela.

Pour que tout cela fonctionne dans mon projet, j'ai fait ce qui suit here qui faisait partie du fil de la liste de diffusion ci-dessus. Je résumé ci-dessous:

The much preferable alternative (ie no hacks!) if you can hack it (sorry!) is to use the same messaging protocol as v1, but in latest API, this is called "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 

and replace any occurence of "Publisher()." by "Publisher."

Puis dans mon script setup.py, je devais ajouter ce qui suit aux options:

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

Vous devriez maintenant être en mesure de construire un exécutable en utilisant la nouvelle version de PubSub, mais avec le vieux api. Vous pourriez également vouloir vérifier la nouvelle api v3 de pubsub. Si votre projet n'est pas trop grand, vous pouvez probablement vous débrouiller sans trop changer.

+1

L'importation de Publisher après que setuparg1 ne fonctionne pas, alors qu'il l'essaie avec setupv1. Cependant, dans les deux cas, lors de la compilation, je reçois toujours l'ImportError. –

4

essayer comme ceci:

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

Puis: remplacer toute occurence de Publisher() par Publisher.

+3

Cette réponse ne fournit rien de nouveau par rapport à la réponse acceptée, il s'agit également d'une question datant de plus de trois ans. – meskobalazs

2

j'utilisais un exemple de code qui a utilisé wx.lib.pubsub pour étudier de et est tombé sur ce problème aussi .

Pour résoudre ce problème simplement, je viens de changer la ligne:

from wx.lib.pubsub import Publisher as pub 

Pour:

from wx.lib.pubsub import pub 

Les réponses acceptées a des liens qui font encore bien, mais pour plus de simplicité, je me suis ajouté cette solution parce que la solution acceptée était un peu confuse.

+0

C'était le moyen le plus court de faire fonctionner un ancien programme rapidement! –

Questions connexes