Aktueller Master lässt sich nicht mehr kompilieren

Hab heute den aktuellen Master geklont, der bei mir jetzt allerdings nicht mehr kompilierbar ist :frowning_face:

Es scheitert am neuen Pythonscript: processHTML.py

Mit Python und der notwendigen Umgebung habe ich leider bisher so gut wie nichts zu tun gehabt.
Hab alles Folgende versucht:

  • python installiert:
    C:\Users\niko>python.exe -V
    Python 3.11.2

  • Folgende Meldungen beim Kompilierversuch:

GENERATING GIT REVISION HEADER FILE
  "b530878" -> D:\_GIT_HUB\ESPuino_master_bilogist\.pio\build\lolin_d32_pro_sdmmc_pe\generated\gitrevision.h
Trying to Install required module: flask_minify
If this failes, please execute "pip install flask_minify" manually.
Requirement already satisfied: flask_minify in c:\users\niko\.platformio\python3\lib\site-packages (0.41)
Requirement already satisfied: jsmin in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (3.0.1)
Requirement already satisfied: rcssmin in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (1.1.1)
Requirement already satisfied: lesscpy in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (0.15.1)
Requirement already satisfied: flask in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (2.2.2)
Requirement already satisfied: xxhash in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (3.2.0)
Requirement already satisfied: htmlmin in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (0.1.12)
Requirement already satisfied: six in c:\users\niko\.platformio\python3\lib\site-packages (from flask_minify) (1.16.0)
Requirement already satisfied: itsdangerous>=2.0 in c:\users\niko\.platformio\python3\lib\site-packages (from flask->flask_minify) (2.1.2)
Requirement already satisfied: Werkzeug>=2.2.2 in c:\users\niko\.platformio\python3\lib\site-packages (from flask->flask_minify) (2.2.2)
Requirement already satisfied: importlib-metadata>=3.6.0 in c:\users\niko\.platformio\python3\lib\site-packages (from flask->flask_minify) (6.0.0)
Requirement already satisfied: click>=8.0 in c:\users\niko\.platformio\penv\lib\site-packages (from flask->flask_minify) (8.1.3)
Requirement already satisfied: Jinja2>=3.0 in c:\users\niko\.platformio\python3\lib\site-packages (from flask->flask_minify) (3.1.2)
Requirement already satisfied: ply in c:\users\niko\.platformio\python3\lib\site-packages (from lesscpy->flask_minify) (3.11)
Requirement already satisfied: colorama in c:\users\niko\.platformio\penv\lib\site-packages (from click>=8.0->flask->flask_minify) (0.4.5)
Requirement already satisfied: zipp>=0.5 in c:\users\niko\.platformio\python3\lib\site-packages (from importlib-metadata>=3.6.0->flask->flask_minify) (3.13.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\niko\.platformio\python3\lib\site-packages (from Jinja2>=3.0->flask->flask_minify) (2.1.2)

[notice] A new release of pip available: 22.2.2 -> 23.0
[notice] To update, run: python.exe -m pip install --upgrade pip
ModuleNotFoundError: No module named 'flask_minify':
  File "C:\Users\niko\.platformio\penv\lib\site-packages\platformio\builder\main.py", line 181:
    env.SConscript(item, exports="env")
  File "C:\Users\niko\.platformio\packages\tool-scons\scons-local-4.4.0\SCons\Script\SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "C:\Users\niko\.platformio\packages\tool-scons\scons-local-4.4.0\SCons\Script\SConscript.py", line 285:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "D:\_GIT_HUB\ESPuino_master_bilogist\processHtml.py", line 18:
    from flask_minify.parsers import Parser

Environment             Status    Duration
----------------------  --------  ------------
lolin_d32_pro_sdmmc_pe  FAILED    00:00:03.630
============================================================================================================ 1 failed, 0 succeeded in 00:00:03.630 ============================================================================================================ 

 *  Der Terminalprozess "C:\Users\niko\.platformio\penv\Scripts\platformio.exe 'run'" wurde mit folgendem Exitcode beendet: 1. 
 *  Das Terminal wird von Aufgaben wiederverwendet, drücken Sie zum Schließen eine beliebige Taste. 

  • Wenn ich der Anweisung folge:
If this failes, please execute "pip install flask_minify" manually.

bekomme ich folgende Konsolenmeldungen, d.h. das war wohl nicht das Problem:

C:\Users\niko>pip install flask_minify
Requirement already satisfied: flask_minify in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (0.41)
Requirement already satisfied: six in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (1.16.0)
Requirement already satisfied: flask in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (2.2.2)
Requirement already satisfied: lesscpy in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (0.15.1)
Requirement already satisfied: htmlmin in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (0.1.12)
Requirement already satisfied: jsmin in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (3.0.1)
Requirement already satisfied: xxhash in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (3.2.0)
Requirement already satisfied: rcssmin in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask_minify) (1.1.1)
Requirement already satisfied: Werkzeug>=2.2.2 in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask->flask_minify) (2.2.2)
Requirement already satisfied: Jinja2>=3.0 in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask->flask_minify) (3.1.2)
Requirement already satisfied: itsdangerous>=2.0 in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask->flask_minify) (2.1.2)
Requirement already satisfied: click>=8.0 in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from flask->flask_minify) (8.1.3)
Requirement already satisfied: ply in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from lesscpy->flask_minify) (3.11)
Requirement already satisfied: colorama in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from click>=8.0->flask->flask_minify) (0.4.6)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (from Jinja2>=3.0->flask->flask_minify) (2.1.2)

C:\Users\niko>

Weiters bekomme ich auch immer wieder den Hinweis:

[notice] A new release of pip available: 22.2.2 -> 23.0
[notice] To update, run: python.exe -m pip install --upgrade pip

Wenn ich dann pip install --upgrade pip aufrufe, dann erhalte ich:

C:\Users\niko>python.exe -m pip install --upgrade pip
Requirement already satisfied: pip in c:\users\niko\appdata\local\programs\python\python311\lib\site-packages (23.0)


Zusammenfassung:
Meine vorherige Version von espuino kann ich einwandfrei kompilieren.
Der aktuell frisch gezogene, unveränderte  "master-branch clone" bricht beim Versuch das Python-Script auszuführen ab. 

ModuleNotFoundError: No module named ‚flask_minify‘

Alle Ratschläge letzteres zu installieren, helfen nicht.

VG

Ich denke da muss @laszloh was zu sagen.
Ansonsten finde ich spontan das hier: python - ModuleNotFoundError: No module named 'flask' - Stack Overflow.
Und darin verlinkt für VSC: python 3.x - Getting Error: 'No module named flask' in VSCode even when I have installed flask - Stack Overflow

@Niko Geht es denn mit älteren Ständen?

Hi,
Irgend etwas passt bei dir mit deinem Python environment nicht.

Der Skript führt python pip install aus und installiert flask_minify in den Ordner: c:\users\niko\.platformio\python3\lib\site-packages. Danach versucht er aber das Package aus C:\Users\niko\.platformio\penv\lib\site-packages zu holen.

Damit ist flask_minify am falschen Ort installiert und der Skript findet es nicht. Es scheint, du hast mehrere Python interpreter / environments installiert (mindestens 3), die sich (teilweise) in PATH befinden. Mein Skript ruft (aktuell noch) stur python -m pip install ... auf und das wählt die erste python.exe aus die es in deiner PATH-Variable findet (und der ist der Falsche)…

Als ein kurzen fix, kannst du folgende Änderung bei der Datei processHTML.py durchführen und über das Ergebnis berichten?

--- a/processHtml.py
+++ b/processHtml.py
@@ -4,22 +4,23 @@
 Use this script for creating PROGMEM header files from html files.
 """
 
+Import("env")  # pylint: disable=undefined-variable
+
 from pathlib import Path
 import os
 import mimetypes
 import gzip
+import sys
 
 try:
     from flask_minify.parsers import Parser
 except ImportError:
   print("Trying to Install required module: flask_minify\nIf this failes, please execute \"pip install flask_minify\" manually.")
-  os.system('python -m pip install flask_minify')
+  env.Execute("$PYTHONEXE -m pip install flask_minify")
 
 from flask_minify.parsers import Parser
 import json
 
-Import("env")  # pylint: disable=undefined-variable
-
 OUTPUT_DIR = (
     Path(env.subst("$BUILD_DIR")) / "generated"
 )  # pylint: disable=undefined-variable

So, ich habe die diff ausgebessert auf das Beispiel von PIO.
Gruß,
Laszlo

Ich glaube dieser Fehler könnte in der neuen Lib von espressif behoben sein.

Dort ist ein fix der sehr nach dem Problem von @Niko klingt. Wäre interessant ob ein Update auf 6.0.1 das Problem auch behebt…
Also in der Platfomio.ini

[env]
...
platform = espressif32@6.0.1

und die platform_packages dor auskommentieren.

Das kann aber noch nicht die Lösung sein?

Mit dieser Version wechselt man auf ein neueres IDF 4.4.3 und damit automatisch auf die EXPERIMENTELLE Version Arduino 2!
Das kann jeder machen der neue Sachen ausprobieren möchte, aber wir sollten einen lauffähigen Code, derzeit basierend auf Arduino 1.0.6 haben. Man handelt sich automatisch neue Probleme ein z.B.

  • schwankender Webupload
  • Nichtabspielbarkeit von Dateien/Ordnern mt Umlauten.

Gibt es eine bessere Lösung für dieses Skript-Problem?

Ich denke, dass es weniger mit der IDF version zu tun hat, sondern eher mit einer alten / beschädigten PlatformIO Umgebung von @Niko.

Bei ihm scheinen zwei virtuelle Python Environment für PlatromIO installiert und aktiv zu sein, eines in [...]\.platformio\python3\lib\site-packages (vllt. eine alte python Version von Platformio) und in [...]\.platformio\penv\lib\site-packages (dort wo es auch bei mir installiert ist).

Ich habe eine Verbesserung des Skripts vorbereitet, ich kann es halt auf meinem System nicht testen (bzw. verhalten sich halt beide Skripts, der neue und der alte, gleich bei mir).

Sobald wir den Test haben, kann ich ein Patch machen.

2 „Gefällt mir“

Hi Laszloh,

vielen Dank alle, nach einigen weiteren erfolglosen Versuchen Python bei mir aufzuräumen, hab ich nun deine Änderungen im pythonscript vorgenommen.
git diff Ergebnis:

diff --git a/processHtml.py b/processHtml.py
index 2660869..5208597 100644
--- a/processHtml.py
+++ b/processHtml.py
@@ -4,21 +4,24 @@
 Use this script for creating PROGMEM header files from html files.
 """

+Import("env")  # pylint: disable=undefined-variable
+
+
 from pathlib import Path
 import os
 import mimetypes
 import gzip
+import sys

 try:
     from flask_minify.parsers import Parser
 except ImportError:
   print("Trying to Install required module: flask_minify\nIf this failes, please execute \"pip install flask_minify\" manually.")
-  os.system('python -m pip install flask_minify')
+  env.Execute("$PYTHONEXE -m pip install flask_minify")

 from flask_minify.parsers import Parser
 import json

-Import("env")  # pylint: disable=undefined-variable
:

Genial - jetzt läuft dieses Script durch :slight_smile:

Es gibt jedoch noch ein Problem, das aber in meiner nächsten Antwort.

Vielen Dank!

@Joe91 @biologist
Nachdem das Pythonproblem von @laszloh gelöst wurde, zeigte sich das nächste Problem:

Linking .pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf
.pio\build\lolin_d32_pro_sdmmc_pe\src\Led.cpp.o:(.literal._ZL8Led_TaskPv+0x94): undefined reference to `Battery_EstimateLevel()'
.pio\build\lolin_d32_pro_sdmmc_pe\src\Led.cpp.o: In function `Led_Task(void*)':
D:\_GIT_HUB\ESPuino_master_bilogist/.pio/libdeps/lolin_d32_pro_sdmmc_pe/FastLED/src/controller.h:245: undefined reference to `Battery_EstimateLevel()'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\lolin_d32_pro_sdmmc_pe\firmware.elf] Error 1
====== [FAILED] Took 20.68 seconds ==========================================

undefined reference to `Battery_EstimateLevel()

Ich habe bei mir bisher in settings.h MEASURE_BATTERY_VOLTAGE auskommentiert.

//#define MEASURE_BATTERY_VOLTAGE

Mit aktivierter MEASURE_BATTERY_VOLTAGE kein Problem.
Da fehlt m.M. in folgenden Zeilen die #ifdef MEASURE_BATTERY_VOLTAGE Anweisung .

float batteryLevel = Battery_EstimateLevel();
					// --------------------------------------------------
					// Animation of Battery Measurement
					// --------------------------------------------------
					case LedAnimationType::BatteryMeasurement: {
						LED_INDICATOR_CLEAR(LedIndicatorType::Voltage);
						// Single-LED: indicates voltage coloured between gradient green (high) => red (low)
						// Multi-LED: number of LEDs indicates voltage-level with having green >= 60% ; orange < 60% + >= 30% ; red < 30%
						float batteryLevel = Battery_EstimateLevel();
						if (batteryLevel < 0) { // If voltage is too low or no battery is connected
							LED_INDICATOR_SET(LedIndicatorType::Error);
							break;
						} else {

VG Niko

Morgen die Umlautprobleme (UTF8) lösen.

@Niko Danke für den Hinweis, habe es gefixt und eben hochgeladen.

2 „Gefällt mir“

Die Umlaute haben wir schon gelöst (liegt daran, dass die json Dateien nicht als utf8 geöffnet werden), ich habe grade den Bugfix-Commit für beide Fehler aktualisiert: bugfix: UTF8 encoding & missing translation · laszloh/ESPuino@451af97 · GitHub

Der Commit sollte sich mittels cherry-pick direkt auf den aktuellen HEAD vom master anwenden lassen.

(habe ich schon mal erwähnt, dass ich python ab und zu echt nicht mag)

1 „Gefällt mir“

Vielen Dank, hat einwandfrei funktioniert.

Ganz vergessen: Den letzten Commit von @laszloh habe ich auch in den Master aufgenommen.

So geht’s mir immer, deswegen nehme ich auch Perl :rofl:. Am Anfang von ESPuino war das Script (aber in viel kleiner) tatsächlich auch in Perl geschrieben, aber das wurde irgendwann nicht mehr unterstützt von Platformio.