2013-02-14 19 views
5

Durante accumulo py2exe ottengo il seguente errore:py2exe: errore: libzmq.pyd: No such file or directory

creating python loader for extension 'win32clipboard' (C:\Python27\lib\site-packages\win32\win32clipboard.pyd -> win32clipboard.pyd) 
creating python loader for extension '_rl_accel' (C:\Python27\lib\site-packages\_rl_accel.pyd -> _rl_accel.pyd) 
*** finding dlls needed *** 
error: libzmq.pyd: No such file or directory 

Qualcuno può spiegare se ho davvero bisogno, dove trovarlo e come escluderlo .

Grazie Mads

risposta

1

non sono sicuro che questa è una soluzione ottimale ma ha funzionato per me:

  • scaricare pyzmq da http://pypi.python.org/pypi/pyzmq
  • installare l'uovo utilizzando easy_install
  • copia libzmq .dll da C: \ Python27 \ Lib \ site-packages \ pyzmq-2.2.0.1-py2.7-win32.egg \ zmq a C: \ Python27 \ dlls \

Mads

+1

C'è un'altra soluzione. Vedi ** [qui] (http://www.py2exe.org/index.cgi/Py2exeAndzmq) **. – pradyunsg

3

Purtroppo questa non è una bella risposta, ma penso che sia una diagnosi decente.

Il py2exe wiki non è aggiornato (almeno credo). Credo che la versione 13.0.0 abbia apportato una modifica in cui libzmq.pyd sostituisce libzmq.dll. La normale gestione dei moduli di estensione di Py2exe la rinomina in "zmq.libzmq.pyd", ma ciò interrompe il reperimento della dll di Windows poiché (ad esempio) i collegamenti zmq.core._device.pyd esplicitamente in libzmq.pyd.

Ciò motiva una brutta alternativa alternativa di copiare zmq.libzmq.pyd in libzmq.pyd nella cartella dist generata da py2exe. Con questa correzione, il mio output py2exe viene eseguito correttamente senza errori di importazione.

10

Tre passaggi sono necessari per farlo funzionare:

  • Escludi libzmq.pyd da DLL con dll_excludes opzione. Questo evita errori "missing pyzmq.pyd".
  • Escludere zmq.libzmq (stessa cosa) dai moduli con excludes. Questo salta il solito .pyd renamind e proxying che py2exe fa.
  • Aggiungi zmq.backend.cython esplicitamente con l'opzione includes, perché py2exe non può vederlo tramite il codice di selezione del backend pyzmq. Otterrete errori "nessun modulo chiamato cffi" se non riuscite a farlo.

Esempio:

import zmq.libzmq 

setup(
    # ... 
    zipfile='lib/library.zip', 
    options={ 
     'py2exe': { 
      'includes': ['zmq.backend.cython'], 
      'excludes': ['zmq.libzmq'], 
      'dll_excludes': ['libzmq.pyd'], 
     } 
    }, 
    data_files=[ 
     ('lib', (zmq.libzmq.__file__,)) 
    ] 
) 
0

Una soluzione più semplice che ha lavorato, come sopra una soluzione necessaria la compilazione libzmq - ma io-m-LZY.

  1. Copia libzmq.pyd da C: \ python27 \ lib \ Siti-pacchetti \ zmq in c: \ python27 \ DLL importazione zmq.libzmq
  2. avere il seguente comprende e data_files nella configurazione. Questo è tutto

    setup ( # ... opzioni = { 'py2exe': { 'include': [ 'zmq.backend.Cython '] }} , data_files = [ (' lib', (zmq.libzmq. file di,)) ] )

Problemi correlati