Diese question wurde zuvor gefragt, und ich kann nicht scheinen, meine PyInstaller ordnungsgemäß zu funktionieren. Ich habe den folgenden Code in meiner mainscript.py Datei aufgerufen:Das Bündeln von Datendateien mit PyInstaller 2.1 und MEIPASS-Fehler --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)
Wenn ich die py-Datei (im IDLE) laufen, meine app läuft perfekt und lädt alle Datendateien. Allerdings, wenn ich bündeln es mit PyInstaller 2.1 (eine Datei-Methode) bekomme ich folgende Fehlermeldung nach der exe baut:
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/*.*'
Hat jemand eine Idee, wo ich schief gelaufen? Vielen Dank!
** EDIT **
Hier ist genau das, was ich tun möchte.
Mein Hauptskript hat ein Setup (Importe), die wie folgt aussehen. Im Grunde möchte ich in der Lage sein zu haben Matplotlib, Basemap und Ressourcenpfad alles drin:
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'
Ich bin mit PyInstaller 2.1. Ich benutze auch Python 2.7.5 (32 Bit). Mein Betriebssystem ist Windows 8 (64bit). Meine Matplotlib ist 1.3.0 und Basemap ist 1.0.6. Wxpython ist 2.8.12.1 (Unicode).
Ich gehe zum Befehl und tun: > pyinstaller myscript.py
. Dies erzeugt meine .spec-Datei, die ich leicht bearbeite. Unten ist meine editierten Spec-Datei:
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')
ich dies mit einer Datei ausführbar sein will, so sollten die Daten-Dateien innerhalb der ausführbaren Datei gepackt werden. Auf anderen pininstallers hatte ich normalerweise keine Probleme mit dem MEIPASS. Allerdings muss ich 2.1 wegen Matplotlib und Grundkarte verwenden. Wenn jemand diese exe perfekt bauen kann - kannst du mir bitte sagen, was ich anpassen muss? Vielen Dank!
**** EDIT ****
Wenn jemand herausfinden, wie dies mit py2exe zu tun - das zu groß wäre. Jede Art, wie ich das in eine einzelne ausführbare Datei bringen kann, wäre es wert!
Ich bin nicht sicher, dass dies das Problem hier ist, aber die Pypi-Version von Pyinstaller 2.1 scheint eine Reihe von Fehlern zu haben, versuchen Sie die Git-Version unter https://github.com/pyinstaller. –
Ich habe die eine Seite von pyinstaller.org heruntergeladen - ist das das Gleiche wie von pypi? – mcfly
würde ich so erwarten. Sie sind beide die 2.1-Version. –