2013-03-18 12 views
15

Ho Python 2.7 su Windows 7 OS. Vorrei impacchettare il mio project.py in un eseguibile usando py2exe. Seguendo le istruzioni che ho scritto un file setup.pypacchetto un software in Python utilizzando py2exe con 'libiomp5md.dll' non trovato

from distutils.core import setup 
import py2exe 

setup(console=["project.py"]) 

e ho ricevuto questo messaggio

enter image description here

ho cercato di escludere 'libiomp5md.dll'

from distutils.core import setup 
import py2exe 

setup(console=["SegmentationAccuracy.py"]) 

dll_excludes = ['libiomp5md.dll'] 

ma sempre ho lo stesso messaggio di errore "errore: libiomo5md.dll: nessun file o directory"

mio eseguibile contiene:

import math 
import os 
import numpy as np 
import sys 
import ogr 
from progressbar import ProgressBar 
from shapely.geometry import Polygon 
nan = np.nan 
+0

È possibile copiare l'output dalla console di Windows facendo clic sull'icona in alto a sinistra e andando su "Modifica-> Segna" e premere "Invio" per copiare – danodonovan

+0

Questa domanda ha dieci mesi; potresti accettare una risposta? – bdesham

risposta

9

libiomp5md.dll da compilatore Intel C, e viene utilizzato per le operazioni di OpenMP multiprocessing. Mi aspetto che il tuo codice contenga lo numpy o il codice compilato con il compilatore Intel, quindi la tua build py2exe dipende da esso.

Non è possibile creare semplicemente una build senza di essa, quindi suggerirei di trovarla sul proprio sistema e copiarla nella directory in cui si esegue python setup.py py2exe. Suggerimento, ho una copia in C:\Python27\Lib\site-packages\numpy\core

[Se davvero si vuole escluderla si dovrà compilare numpy manualmente con Visual Studio o Msys.]

Una volta che avete libiomp5md.dll nella directory che si sta eseguendo python setup.py py2exe allora avete solo bisogno di rimuovere la linea exclude_dll (come non si vuole essere escluderlo ...)

from distutils.core import setup 
import py2exe 

setup(console=["SegmentationAccuracy.py"]) 
+0

sì è vero il codice coinvolge Numpy –

29

ho avuto lo stesso problema, ma chiamando import numpy all'interno setup.py risolto il problema

+1

Ehi @ChrisB. Ho appena spostato il file libiomp5md.dll nella cartella di setup.py e funziona –

+0

aggiungendo "import numpy" ha funzionato anche per me. In realtà non si desidera spostare le DLL in giro, poiché altri componenti potrebbero dipendere dal fatto che si trovano in un determinato punto. – Pierre

0

Ho avuto lo stesso problema. Ho dovuto installare numpy su una macchina, l'ho fatto con il compilatore mingw gcc. Ho confermato: copia di dll trovata in C: \ Python27 \ Lib \ site-packages \ numpy \ core \

Ho appena copiato nella directory di lavoro prima di avviare l'installazione.

Niente di speciale da sintonizzare su setup.py, le dipendenze vengono trovate automaticamente.

0

OK, ho avuto lo stesso problema. Si è scoperto che un file .pyd in sklearn faceva riferimento a libiomp5md.dll. Py2exe cerca in due posti per la tua DLL - sulla variabile di ambiente path e nella stessa directory in cui si trova il file .pyd. Libiomp5md.dll non è in nessuno dei due. Py2exe si arrende e invece di dare un nome di percorso completo come c: \ Python27 \ lib \ site-packages \ numpy \ core \ libiomp5md.dll, dice "libiomp5md.dll" che, più tardi, non può trova.

Sono impaziente. Ho aggiunto una riga all'interno del mio file di installazione:

os.environ ["PATH"] + = os.pathsep + os.path.dirname (numpy.core.file)

e che è dove libiomp5md.dll è. Ora tutto funziona. Assicurati di farlo nel tuo codice prima di chiamare l'installazione e lo farà anche per te.