Seite 1 von 3
PyInstaller
Verfasst: Dienstag 23. Juli 2019, 13:49
von JohannX
Hallo ihr lieben Python Entwickler!
Stehe leider vor einem Problem mit dem PyInstaller!
Habe nun etliche Versuche hinter mir und auch das Internet ist mir gerade nicht so wirklich Behilflich
Wie ist die beste Vorgangsweise?
Nutze Anaconda und mit
pip install PyInstaller habe ich bereits installiert
Das ist alles was ich importiere
Code: Alles auswählen
import sys
from qtpy import QtWidgets
from ui.mainwindow import Ui_asc_File_Reader
import pandas as pd
from easygui import fileopenbox, diropenbox
from functools import partial
import plotly.graph_objects as go
import plotly
John
Re: PyInstaller
Verfasst: Dienstag 23. Juli 2019, 13:56
von __deets__
Und was soll dieses Problem sein? Was probierst du, was sind erwarteten Ergebnisse, was passiert stattdessen? Welche Fehlermeldungen bekommst du?
So wie du dein Problem bisher beschreibst kann man auch nur sagen "fuer andere Leute funktionierts".
Re: PyInstaller
Verfasst: Dienstag 23. Juli 2019, 14:02
von __deets__
Die importe reichen nicht. Lies nochmal meine andere Antwort & beantworte die Fragen darin.
Re: PyInstaller
Verfasst: Dienstag 23. Juli 2019, 15:22
von __blackjack__
`easygui` (Tk) und Qt zu mixen ist keine gute Idee bis hin zu: das kann Probleme machen. Qt hat auch Dateidialoge, die muss man sich nicht von woanders her holen.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 08:41
von JohannX
@__blackjack__
Danke für den Hinweis! Ich brauche nur ein äquivalent zu:
Code: Alles auswählen
self.file = easygui.fileopenbox(msg="Please locate the asc file", title="Specify File", default="I:\*.asc")
und
Code: Alles auswählen
self.file2 = easygui.diropenbox(msg="Please locate the directory to save", title="Specify File")
Ich bin noch nicht so gut in Python
Und eine Fehlermeldung bekomme ich wenn ich das .exe öffnen möchte:
File "site-packages\qtpy\__init__.py", line 210 in <module> qtpy.PythonQtError: No Qt Bindings could be found
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:04
von Jankie
Hey, das wären bei QT soweit ich weiß
QFileDialog.getOpenFileNames() und QFileDialog.getSaveFileName()
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:08
von __blackjack__
@JohannX: Man wird da wohl noch explizit ein Qt-Binding angeben müssen, das mit in die EXE eingebunden wird. Wobei an der Stelle dann `qtpy` anfängt keinen Sinn mehr zu machen wenn Du das Qt-Binding mit auslieferst. Dann kannst du auch PyQt oder PySide *direkt* nehmen, je nach dem welche Lizenz besser zu Dir passt. Also ob Du den Quelltext für die Benutzer der EXE zur Verfügung stellen müssen möchtest oder nicht.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:42
von JohannX
@__blackjack__
Nein musste ich nicht, ich gebe einfach folgenden Befehl ein sobald ich in den Ordner Navigiert habe (Im Terminal als Admin):
pyinstaller Filename.py --onefile
Und schon läuft das Teil...
Nach gefühlt 10min erscheint dann die exe, diese lässt sich auch Starten und das Fenster geht auch auf. Aber sobald ich auf export to html klicke Stürzt es ab und die oben erwähnte Fehlermeldung erscheint im Terminal
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:43
von JohannX
Jankie hat geschrieben: Mittwoch 24. Juli 2019, 09:04
Hey, das wären bei QT soweit ich weiß
QFileDialog.getOpenFileNames() und QFileDialog.getSaveFileName()
Danke, habe es nun importiert:
bekomme jedoch diese Fehlermeldung:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-dbf494ed2562> in choose_button(self)
43 self.file = QFileDialog.getOpenFileNames()
44 # Zeigt den Pfad der Datei an
---> 45 self.ui.Info1.setText(self.file)
46
47 # Anzeige auf der rechten Seite mit YES oder NO
TypeError: setText(self, str): argument 1 has unexpected type 'tuple'
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:52
von snafu
getOpenFileNames() gibt auch eine Liste zurück. Davon musst du dann entweder den ersten Eintrag nehmen oder direkt die Variante ohne dem "s" am Ende nehmen. Die gibt wahrscheinlich eher zurück, was du erwartest.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:56
von JohannX
Danke snafu
Aber der Fehler bleibt trotzdem der selbe
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-34e54b1d5f2d> in choose_button(self)
43 self.file = QFileDialog.getOpenFileName()
44 # Zeigt den Pfad der Datei an
---> 45 self.ui.Info1.setText(self.file)
46
47 # Anzeige auf der rechten Seite mit YES oder NO
TypeError: setText(self, str): argument 1 has unexpected type 'tuple'
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 09:59
von snafu
Was ergibt denn die Ausgabe von print(type(self.ui.Info1)) ?
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:00
von Jankie
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:06
von snafu
@Jankie: Bei PyQt5 wie auch bei PySide2 bekommt man direkt "echte" Python-Strings und keine QStrings mehr. Entsprechend ist eine QStringList nun einfach eine Python-Liste mit Strings. Außerdem passt das bei genauerem Hinsehen auch gar nicht zur Fehlermeldung, wo ja von einem Tupel die Rede ist.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:08
von JohannX
Wie auch immer, mit dem Tipp von Jankie hat das nun geklappt!
Danke dir

Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:09
von __deets__
@Jankie: was nicht passt wird passend gemacht? Gerne auch mit dem groben

?
Der Rueckgabewert ist ein Tupel aus Dateiname und Dateityp:
Also muss man auf das gewuenschte Element zugreifen, am besten so:
@JohannX: wenn sowas passiert, printe dir den Wert vorher mal aus, damit du lernst, wie der beschaffen ist.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:10
von __deets__
JohannX hat geschrieben: Mittwoch 24. Juli 2019, 10:08
Wie auch immer, mit dem Tipp von Jankie hat das nun geklappt!
Nein, hat es nicht. Oder willst du irgendwann mal mit dem Dateinamen was anfangen? Dann ist der IMMER noch ein Tupel, und fliegt dir immer noch um die Ohren. Das Problem hat sich nur verlagert

Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:20
von JohannX
Nun bekomme ich leider eine neue Fehlermeldung
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-f4b9f41d41bd> in on_html_click(self)
106
107 # Sortiert die Daten
--> 108 self.df_all = pd.read_csv(self.file, skiprows=5, delimiter=";", converters={' DATA L': partial(int, base=16)})
109
110 # Schneidet den nur Filenamen raus und speichert diesen in eine neue Variable
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
700 skip_blank_lines=skip_blank_lines)
701
--> 702 return _read(filepath_or_buffer, kwds)
703
704 parser_f.__name__ = name
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
411 compression = _infer_compression(filepath_or_buffer, compression)
412 filepath_or_buffer, _, compression, should_close = get_filepath_or_buffer(
--> 413 filepath_or_buffer, encoding, compression)
414 kwds['compression'] = compression
415
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\common.py in get_filepath_or_buffer(filepath_or_buffer, encoding, compression, mode)
230 if not is_file_like(filepath_or_buffer):
231 msg = "Invalid file path or buffer object type: {_type}"
--> 232 raise ValueError(msg.format(_type=type(filepath_or_buffer)))
233
234 return filepath_or_buffer, None, compression, False
ValueError: Invalid file path or buffer object type: <class 'tuple'>
Tut mir sehr leid dass ich euch mit meinen Fehlern nerve, aber ich habe derzeit keinen Kopf mehr dafür. Sitze nun den 2. Tag in folge an diesem Problem, dass ich es nicht in eine exe File exportieren kann
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:22
von __deets__
Hast du meine Antworten gelesen? Da habe ich dir das vorhergesagt. Und dir gezeigt, wie man es richtig macht. Lesen was dir Leute hier schreiben musst du schon. Sonst geht's nicht.
Re: PyInstaller
Verfasst: Mittwoch 24. Juli 2019, 10:36
von JohannX
__deets__ hat geschrieben: Mittwoch 24. Juli 2019, 10:22
Hast du meine Antworten gelesen? Da habe ich dir das vorhergesagt. Und dir gezeigt, wie man es richtig macht. Lesen was dir Leute hier schreiben musst du schon. Sonst geht's nicht.
Keine Sorge, ich lese schon. Aber du hast es anscheinend kurz vor mir die Antwort geschrieben.
Nun funktioniert es soweit ohne easygui
Danke!
Bei diesem Code:
Muss ich aber immer ne Datei auswählen, aber ich möchte nur einen Ordner auswählen wohin die Datei gespeichert wird.
Könnte es dann so aussehen?