Этот question был задан раньше, и я не могу заставить PyInstaller работать правильно. Я привел следующий код в файле mainscript.py:
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)
Когда я запускаю файл py (в течение IDLE), мое приложение отлично работает и загружает все файлы данных. Однако, когда я свяжу его с PyInstaller 2.1 (одним файлом), я получаю следующую ошибку после сборки exe:
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/*.*'
Кто-нибудь знает, где я ошибся? Спасибо!
** РЕДАКТИРОВАТЬ **
Вот что я хочу делать.
В моем главном script есть настройка (импорт), которая выглядит ниже. По сути, я хочу иметь в нем Matplotlib, Basemap и путь ресурсов:
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'
Я использую PyInstaller 2.1. Я также использую Python 2.7.5 (32 бит). Моя ОС - Windows 8 (64 бит). Мой Matplotlib - 1.3.0, а Basemap - 1.0.6. Wxpython - 2.8.12.1 (Unicode).
Я иду в команду и делаю: > pyinstaller myscript.py
. Это создает мой .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')
Я хочу, чтобы это было однофайльным исполняемым файлом, поэтому файлы данных должны быть упакованы в исполняемый файл. На других pyinstallers у меня обычно не было проблем с MEIPASS. Однако мне нужно использовать 2.1 из-за Matplotlib и Basemap. Если кто-то сможет построить этот exe отлично - не могли бы вы рассказать мне, что мне нужно настроить? Спасибо!
**** **** EDIT
Если кто-то может понять, как это сделать с py2exe - это тоже здорово. Любой способ, которым я могу получить это в один исполняемый файл, будет стоить того!