Questo question è stato richiesto in precedenza e non riesco a far funzionare correttamente il mio PyInstaller. Ho invocato il seguente codice nel mio file mainscript.py:Raggruppamento di file di dati con PyInstaller 2.1 e errore MEIPASS --onefile
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
Quando eseguo il file py (in un raggio IDLE), la mia app funziona perfettamente e carica tutti i file di dati. Tuttavia, quando ho bundle con PyInstaller 2.1 (un metodo file) ottengo il seguente errore dopo l'exe costruisce:
Traceback (most recent call last):
File "<string>", line 37, in <module>
WindowsError: [Error 3] The system cannot find the path
specified: 'C:\\Users\\Me\\AppData\\Local\\Temp\\_MEI188722\\eggs/*.*'
Qualcuno ha qualche idea di dove ho sbagliato? Grazie!
** EDIT **
Ecco esattamente quello che voglio fare.
Il mio script principale ha un'impostazione (importazioni) simile a quella riportata di seguito. In sostanza voglio essere in grado di avere Matplotlib, Basemap, e il percorso delle risorse in esso tutto:
import os,sys
import matplotlib
matplotlib.use('WX')
import wx
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from mpl_toolkits.basemap import Basemap
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import Calculate_Distance # A personal py file of mine
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
bmap=wx.Bitmap(resource_path('test_image.png'))
print 'hello'
Sto usando PyInstaller 2.1. Sto anche usando Python 2.7.5 (32 bit). Il mio sistema operativo è Windows 8 (64 bit). My Matplotlib è 1.3.0 e Basemap è 1.0.6. Wxpython è 2.8.12.1 (Unicode).
Vado al comando e faccio: > pyinstaller myscript.py
. Questo genera il mio file .spec che modifico leggermente. Qui di seguito è il mio modificato il file spec:
data_files = [('Calculate_Distance.py', 'C:\\Users\\Me\\Documents\\MyFolder\\Calculate_Distance.py',
'DATA'), ('test_image.png', 'C:\\Users\\Me\\Documents\\MyFolder\\test_image.png',
'DATA')]
includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
'Tkconstants', 'Tkinter']
packages = []
dll_excludes = []
dll_includes = []
a = Analysis(['myscript.py'],
pathex=['C:\\Users\\Me\\Documents\\MyFolder','C:\\Python27\\Lib\\site-packages\\mpl_toolkits\\basemap\\*'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries - dll_excludes + dll_includes + data_files,
name='MyApplication.exe',
debug=False,
strip=None,
upx=True,
console=True)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=None,
upx=True,
name='MyApplication')
io voglio che questo sia un file eseguibile un file in modo che i file di dati devono essere imballati all'interno dell'eseguibile. Su altri pyinstaller di solito non ho avuto problemi con MEIPASS. Tuttavia, ho bisogno di usare 2.1 a causa di Matplotlib e Basemap. Se qualcuno può costruire questo exe perfettamente - puoi dirmi per favore cosa devo aggiustare? Grazie!
**** **** EDIT
Se qualcuno riesce a capire come fare questo con py2exe - che sarebbe troppo grande. Ne potrebbe valere la possibilità di ottenere questo in un singolo file eseguibile!
Non sono sicuro che questo sia il problema, ma la versione pypi di Pyinstaller 2.1 sembra avere un sacco di bug, prova ad usare la versione git su https://github.com/pyinstaller. –
Ho scaricato l'unico file pyinstaller.org - è come ottenere da pypi? – mcfly
Mi aspetterei così. Sono entrambi la versione 2.1 di rilascio. –