Проект pycharm работает на «run», но pyinstaller --onefile выдает ошибки, связанные с целлюлозой - PullRequest
0 голосов
/ 07 сентября 2018

Я работал над проектом, где пользователь может загрузить файл для анализа через целлюлозу. Когда я запускаю проект в pycharm, он работает нормально, но после того, как я собрал --onefile с pyinstaller ... я получаю следующую трассировку

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1702, in __call__
  File "example.py", line 29, in get_file
  File "pydfs_lineup_optimizer\lineup_optimizer.py", line 351, in optimize
  File "pydfs_lineup_optimizer\solvers\pulp_solver.py", line 39, in solve
  File "site-packages\pulp\pulp.py", line 1664, in solve
AttributeError: 'NoneType' object has no attribute 'actualSolve'

Вот фрагмент кода, с которым у меня проблема:

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from tkinter.filedialog import askopenfilename
import csv
import time
import os, sys
import PIL
from PIL import Image, ImageTk
from tkinter.font import Font




def get_file():
    global file
    file = tk.filedialog.askopenfilename()

def run_it():
    from pydfs_lineup_optimizer import Site, Sport, get_optimizer
    optimizer = get_optimizer(Site.FANDUEL, Sport.BASEBALL)
    optimizer.load_players_from_CSV(file)
    lineup_generator = optimizer.optimize(3)
    with open('Lineup.csv', "w") as csv_file:
        writer = csv.writer(csv_file, delimiter=' ')
        for lineup in lineup_generator:
            writer.writerow([lineup])

top = tk.Tk()
top.geometry("600x337")
if getattr(sys, 'frozen', False):
    baseDir = sys._MEIPASS
else:
    baseDir = os.path.abspath(os.path.dirname(__file__))

image = Image.open(os.path.join(baseDir, 'baseball.jpg'))

photo = ImageTk.PhotoImage(image)
L0 = Label(top, image=photo)

L2 = Button(top, text="UPLOAD", fg="blue", font=font2, command=get_file).grid(row=1, column=4)
L3 = Button(top, text="RUN", fg="blue", font=font2, command=run_it).grid(row=2, column=4)
top.mainloop()

1 Ответ

0 голосов
/ 07 сентября 2018

Pulp требует, чтобы файл cbc.exe был доступен для использования для фактического решения проблем lp.

К сожалению, pyinstaller не подхватывает это по умолчанию, и вам нужно найти способ упаковать файл cbc.ex, а затем сообщить решателю COIN_CMD (), где его найти.

Сделайте это с помощью COIN_CMD(path=<your_path_here>)

...