fhempy: googlecast

Begonnen von dominik, 04 Dezember 2020, 23:33:53

Vorheriges Thema - Nächstes Thema

a_quadrat

Hallo Dominik,

PlayFavorite geht wieder, aber Spotify will nicht mehr so richtig. Manchmal geht's, manchmal nicht. Ich kann noch nicht nachvollziehen, warum es manchmal funktioniert. Anbei Mal der Auszug aus dem Log. Kannst du damit was anfangen?


2020-12-31 11:42:12,082 - ERROR    - castdevice_Kueche: Failed to play spotify track
Traceback (most recent call last):
  File "/opt/fhem/.local/lib/python3.8/site-packages/fhempy/lib/googlecast/googlecast.py", line 302, in playSpotify
    await utils.run_blocking(functools.partial(sp.launch_app))
  File "/opt/fhem/.local/lib/python3.8/site-packages/fhempy/lib/utils.py", line 28, in run_blocking
    return await asyncio.get_event_loop().run_in_executor(pool, function)
  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/opt/fhem/.local/lib/python3.8/site-packages/pychromecast/controllers/spotify.py", line 88, in launch_app
    raise LaunchError(
pychromecast.error.LaunchError: Timeout when waiting for status response from Spotify app


VG Andreas

dominik

Probier mal einen neue sp_dc und sp_key zu setzen. Diese Meldung kommt immer, wenn Spotify am Device nicht fertig gestartet werden konnte weil User Authentifizierung fehlgeschlagen ist.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

a_quadrat

Das hat funktioniert. Hast du das Problem schon öfter gehabt?
Ich habe gesehen, dass du Shuffle schon mit eingebunden hast. Funktioniert es schon? Wenn ja, was für einen Wert muss ich übergeben? Im Log steht "2020-12-31 14:31:22,390 - WARNING  - spotipy.client: state must be a boolean" mit true habe ich es schon probiert - ohne Erfolg.

VG Andreas

dominik

Nein, noch nicht. Ich habe schon einen Weg gefunden, wie man die 2 Werte automatisch über Username/Passwort jederzeit aktualisieren kann :) Falls das Problem also regelmäßig auftritt, dann kommt das weiter rauf auf meiner Prio Liste.

Shuffle folgt heute noch ein Update, dann funktioniert es auch.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

a_quadrat

 :) sehr schön.

Ich wünsche noch einen guten Rutsch ins neue Jahr.  8) Heute ist Sylvester.  ;)

VG Andreas

ReneH87

Zitat von: dominik am 30 Dezember 2020, 20:33:53
Hm...kannst du mal prüfen ob fhempy mit --local Argument gestartet wurde
$ ps -efa|grep fhempy
fhem     30570   538  7 20:25 ?        00:00:27 python3 FHEM/bindings/python/bin/fhempy --local


Ein 127.0.1.1 Device sollte nie angelegt werden. 127.0.1.1 ist scheinbar eine Adresse die sich auf den Hostname bei Debian bezieht, kannte ich auch noch nicht.

fhem_peer_... wird automatisch angelegt, wenn im Netzwerk ein fhempy erkannt wird, bei lokaler Nutzung wird es durch das --local Argument deaktiviert.

root@fhem:/opt/fhem# ps -efa|grep fhempy
root      4149  4015  0 15:09 pts/1    00:00:00 grep fhempy


so sollte es auf dem Server auch sein, auf dem fhem läuft - oder? Also fhem läuft bei mir unter Docker auf meinem Synology NAS und die Remote Instanz bekanntlich auf dem raspi zero. Könnte das Verhalten evtl. daher kommen, dass ich zuerst versucht hatte zusätzlich eine lokale Instanz laufen zu lassen? (hatte nicht funktioniert, vermutlich wegen Docker...)

Superposchi

Hier die Ausgabe des im anderen Thread genannten Befehls:
Collecting spotify_token                                                                                                                                                                                                                       
  Using cached https://files.pythonhosted.org/packages/d6/f5/9bf0e6664d6afa27e7329c949707d9c3ce143b1154895d0f49b836952bf4/spotify_token-1.0.0-py2.py3-none-any.whl                                                                             
Collecting lxml>=4.4.1 (from spotify_token)                                                                                                                                                                                                     
  Using cached https://files.pythonhosted.org/packages/db/f7/43fecb94d66959c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz                                                                                                     
Requirement already satisfied: requests>=2.0 in /usr/lib/python3/dist-packages (from spotify_token) (2.21.0)                                                                                                                                   
Requirement already satisfied: beautifulsoup4>=4.8.1 in ./.local/lib/python3.7/site-packages (from spotify_token) (4.9.3)                                                                                                                       
Requirement already satisfied: soupsieve>1.2; python_version >= "3.0" in ./.local/lib/python3.7/site-packages (from beautifulsoup4>=4.8.1->spotify_token) (2.1)                                                                                 
Building wheels for collected packages: lxml                                                                                                                                                                                                   
  Running setup.py bdist_wheel for lxml ... /^canceled                                                                                                                                                                                         
Operation cancelled by user 


Wurde mit Code 1 beendet, was einen Fehler bedeutet. Leider gibt es keine vernünftige Dokumentation was welcher Fehlercode genau bedeutet.

dominik

Zitat von: ReneH87 am 31 Dezember 2020, 15:13:11
root@fhem:/opt/fhem# ps -efa|grep fhempy
root      4149  4015  0 15:09 pts/1    00:00:00 grep fhempy


so sollte es auf dem Server auch sein, auf dem fhem läuft - oder? Also fhem läuft bei mir unter Docker auf meinem Synology NAS und die Remote Instanz bekanntlich auf dem raspi zero. Könnte das Verhalten evtl. daher kommen, dass ich zuerst versucht hatte zusätzlich eine lokale Instanz laufen zu lassen? (hatte nicht funktioniert, vermutlich wegen Docker...)

Den Fehler mit 127.0.1.1 konnte ich finden und ist behoben. Sollte nicht mehr vorkommen, das 127.0.1.1 Device kannst du löschen.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Zitat von: Superposchi am 02 Januar 2021, 13:04:10
Hier die Ausgabe des im anderen Thread genannten Befehls:
Collecting spotify_token                                                                                                                                                                                                                       
  Using cached https://files.pythonhosted.org/packages/d6/f5/9bf0e6664d6afa27e7329c949707d9c3ce143b1154895d0f49b836952bf4/spotify_token-1.0.0-py2.py3-none-any.whl                                                                             
Collecting lxml>=4.4.1 (from spotify_token)                                                                                                                                                                                                     
  Using cached https://files.pythonhosted.org/packages/db/f7/43fecb94d66959c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz                                                                                                     
Requirement already satisfied: requests>=2.0 in /usr/lib/python3/dist-packages (from spotify_token) (2.21.0)                                                                                                                                   
Requirement already satisfied: beautifulsoup4>=4.8.1 in ./.local/lib/python3.7/site-packages (from spotify_token) (4.9.3)                                                                                                                       
Requirement already satisfied: soupsieve>1.2; python_version >= "3.0" in ./.local/lib/python3.7/site-packages (from beautifulsoup4>=4.8.1->spotify_token) (2.1)                                                                                 
Building wheels for collected packages: lxml                                                                                                                                                                                                   
  Running setup.py bdist_wheel for lxml ... /^canceled                                                                                                                                                                                         
Operation cancelled by user 


Wurde mit Code 1 beendet, was einen Fehler bedeutet. Leider gibt es keine vernünftige Dokumentation was welcher Fehlercode genau bedeutet.

Hast du Strg-C gedrückt?
ZitatRunning setup.py bdist_wheel for lxml ... /^canceled                                                                                                                                                                                         
Operation cancelled by user 

Hier steht durch den User abgebrochen.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Superposchi

#39
Habe ich auch gesehen, aber ich habe nichts abgebrochen.
Es hörte irgendwann 2 Zeilen vor dem geposteten Ende auf und nach ca. 10 Minuten kamen die letzten beiden Zeilen mit der Fehlermeldung Code 1. Doch es wurde nicht von mir abgebrochen.

Wenn ich den Text richtig verstehe kann Fhem das Googlecgemacht.st-Module nicht laden, die Frage ist aber warum und wieso. habe ja nur ein Update

Hab den Befehl gerade extra noch mal abgesetzt. Diesmal passierte gar nichts, hab extra 5 Minuten gewartet, keine einzige Rückmeldung.

dominik

Warum es nicht geht, habe ich dir hier schon beantwortet:
https://forum.fhem.de/index.php/topic,117289.msg1116837.html#msg1116837

Probier bitte auch
sudo apt-get install python3-lxml python3-dev
und danach nochmals
sudo -u fhem pip3 install spotify_token
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Superposchi

Der erste Befehl brachte folgende Rückmeldung:
  python3-bs4 python3-html5lib python3-lxml python3-soupsieve python3-webencodings                                                                                                                                                             
0 upgraded, 5 newly installed, 0 to remove and 27 not upgraded.                                                                                                                                                                                 
Need to get 1.306 kB of archives.                                                                                                                                                                                                               
After this operation, 4.356 kB of additional disk space will be used.                                                                                                                                                                           
Do you want to continue? [Y/n] y                                                                                                                                                                                                               
Get:1 https://cdn-aws.deb.debian.org/debian buster/main armhf python3-soupsieve all 1.8+dfsg-1 [27,6 kB]                                                                                                                                       
Get:2 https://cdn-aws.deb.debian.org/debian buster/main armhf python3-bs4 all 4.7.1-1 [94,1 kB]                                                                                                                                                 
Get:3 https://cdn-aws.deb.debian.org/debian buster/main armhf python3-webencodings all 0.5.1-1 [10,9 kB]                                                                                                                                       
Get:4 https://cdn-aws.deb.debian.org/debian buster/main armhf python3-html5lib all 1.0.1-1 [89,5 kB]                                                                                                                                           
Get:5 https://cdn-aws.deb.debian.org/debian-security buster/updates/main armhf python3-lxml armhf 4.3.2-1+deb10u2 [1.084 kB]                                                                                                                   
Fetched 1.306 kB in 2s (793 kB/s)                                                                                                                                                                                                               
Selecting previously unselected package python3-soupsieve.                                                                                                                                                                                     
(Reading database ... 41772 files and directories currently installed.)                                                                                                                                                                         
Preparing to unpack .../python3-soupsieve_1.8+dfsg-1_all.deb ...                                                                                                                                                                               
Unpacking python3-soupsieve (1.8+dfsg-1) ...                                                                                                                                                                                                   
Selecting previously unselected package python3-bs4.                                                                                                                                                                                           
Preparing to unpack .../python3-bs4_4.7.1-1_all.deb ...                                                                                                                                                                                         
Unpacking python3-bs4 (4.7.1-1) ...                                                                                                                                                                                                             
Selecting previously unselected package python3-webencodings.                                                                                                                                                                                   
Preparing to unpack .../python3-webencodings_0.5.1-1_all.deb ...                                                                                                                                                                               
Unpacking python3-webencodings (0.5.1-1) ...                                                                                                                                                                                                   
Selecting previously unselected package python3-html5lib.                                                                                                                                                                                       
Preparing to unpack .../python3-html5lib_1.0.1-1_all.deb ...                                                                                                                                                                                   
Unpacking python3-html5lib (1.0.1-1) ...                                                                                                                                                                                                       
Selecting previously unselected package python3-lxml:armhf.                                                                                                                                                                                     
Preparing to unpack .../python3-lxml_4.3.2-1+deb10u2_armhf.deb ...                                                                                                                                                                             
Unpacking python3-lxml:armhf (4.3.2-1+deb10u2) ...                                                                                                                                                                                             
Setting up python3-webencodings (0.5.1-1) ...                                                                                                                                                                                                   
Setting up python3-html5lib (1.0.1-1) ...                                                                                                                                                                                                       
Setting up python3-lxml:armhf (4.3.2-1+deb10u2) ...                                                                                                                                                                                             
Setting up python3-soupsieve (1.8+dfsg-1) ...                                                                                                                                                                                                   
Setting up python3-bs4 (4.7.1-1) ...


Der zweite Befehl läuft bis zu:
Collecting spotify_token                                                                                                                                                                                                                       
  Using cached https://files.pythonhosted.org/packages/d6/f5/9bf0e6664d6afa27e7329c949707d9c3ce143b1154895d0f49b836952bf4/spotify_token-1.0.0-py2.py3-none-any.whl                                                                             
Requirement already satisfied: requests>=2.0 in /usr/lib/python3/dist-packages (from spotify_token) (2.21.0)                                                                                                                                   
Collecting lxml>=4.4.1 (from spotify_token)                                                                                                                                                                                                     
  Using cached https://files.pythonhosted.org/packages/db/f7/43fecb94d66959c1e23aa53d6161231dca0e93ec500224cf31b3c4073e37/lxml-4.6.2.tar.gz                                                                                                     
Requirement already satisfied: beautifulsoup4>=4.8.1 in ./.local/lib/python3.7/site-packages (from spotify_token) (4.9.3)                                                                                                                       
Requirement already satisfied: soupsieve>1.2; python_version >= "3.0" in ./.local/lib/python3.7/site-packages (from beautifulsoup4>=4.8.1->spotify_token) (2.1)                                                                                 
Building wheels for collected packages: lxml                                                                                                                                                                                                   
  Running setup.py bdist_wheel for lxml ...

und bleibt dann quasi stehen. Genau wie beim letzten Mal, als dann irgendwann der angebliche Abbruch durch den User kam.
Nach mehreren Mnuten kommt dann plötzlich noch folgendes hinzu (angefangen bei der Zeile die oben die letzte war):
[code]  Running setup.py bdist_wheel for lxml ... error                                                                                                                                                                                               
  Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-0dl1osex/lxml/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(cod
e, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-lysgoufd --python-tag cp37:                                                                                                                                                               
  Building lxml version 4.6.2.                                                                                                                                                                                                                 
  Building without Cython.                                                                                                                                                                                                                     
  Building against libxml2 2.9.4 and libxslt 1.1.32                                                                                                                                                                                             
  running bdist_wheel                                                                                                                                                                                                                           
  running build                                                                                                                                                                                                                                 
  running build_py                                                                                                                                                                                                                             
  creating build                                                                                                                                                                                                                               
  creating build/lib.linux-armv7l-3.7                                                                                                                                                                                                           
  creating build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                                                     
  copying src/lxml/sax.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                                   
  copying src/lxml/_elementpath.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                           
  copying src/lxml/builder.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                               
  copying src/lxml/ElementInclude.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                         
  copying src/lxml/__init__.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                               
  copying src/lxml/usedoctest.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                             
  copying src/lxml/cssselect.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                             
  copying src/lxml/pyclasslookup.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                         
  copying src/lxml/doctestcompare.py -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                         
  creating build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                                                             
  copying src/lxml/includes/__init__.py -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                             
  creating build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                                                 
  copying src/lxml/html/diff.py -> build/lib.linux-armv7l-3.7/lxml/html
  copying src/lxml/html/ElementSoup.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                 
  copying src/lxml/html/html5parser.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                 
  copying src/lxml/html/builder.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                     
  copying src/lxml/html/__init__.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                     
  copying src/lxml/html/usedoctest.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                   
  copying src/lxml/html/_setmixin.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                   
  copying src/lxml/html/clean.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                       
  copying src/lxml/html/soupparser.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                   
  copying src/lxml/html/_html5builder.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                               
  copying src/lxml/html/_diffcommand.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                 
  copying src/lxml/html/formfill.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                     
  copying src/lxml/html/defs.py -> build/lib.linux-armv7l-3.7/lxml/html                                                                                                                                                                         
  creating build/lib.linux-armv7l-3.7/lxml/isoschematron                                                                                                                                                                                       
  copying src/lxml/isoschematron/__init__.py -> build/lib.linux-armv7l-3.7/lxml/isoschematron                                                                                                                                                   
  copying src/lxml/etree.h -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                                   
  copying src/lxml/etree_api.h -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                               
  copying src/lxml/lxml.etree.h -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                             
  copying src/lxml/lxml.etree_api.h -> build/lib.linux-armv7l-3.7/lxml                                                                                                                                                                         
  copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                         
  copying src/lxml/includes/xinclude.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                           
  copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                           
  copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                         
  copying src/lxml/includes/config.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                             
  copying src/lxml/includes/__init__.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                           
  copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                           
  copying src/lxml/includes/uri.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                                 
  copying src/lxml/includes/xslt.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                               
  copying src/lxml/includes/tree.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                               
  copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                           
  copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-armv7l-3.7/lxml/includes
  copying src/lxml/includes/xpath.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                               
  copying src/lxml/includes/relaxng.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                             
  copying src/lxml/includes/c14n.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                               
  copying src/lxml/includes/schematron.pxd -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                 

dominik

Auch wenn es mehrere Minute dort steht, einfach nicht angreifen. Wenn es 1h steht, dann Bescheid geben.

Ich glaube dein Log ist nicht komplett, oder endet es aktuell mit
copying src/lxml/includes/schematron.pxd -> build/lib.linux-armv7l-3.7/lxml/includes   
?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Superposchi

Sorry, das ist einfach Scheiße, ich muss den Befehl in einem Terminalfenster des Containers starten was dann wiederum ein neues Brwoserfenster öffnet wo die Ausführung mitgeloggt wird. Leider kann man dort nur Seitenweise kopieren und auch nur mit Rechtsclick und kopieren (strg-C funktioniert komischerweise nicht). Hab die Seite leider schon zu gemacht. Aberdas Log endete wieder mit einem angeblichen User-Abbruch obwohl ich wieder nichts weiter gemacht habe als die Anwendung zu wechseln.

Werde die Befehle noch mal ausführen und dann noch mal schauen.

Superposchi

So, hab den Befehl noch mal ausgeführt und nach gut einer halben Stunde mit insgesamt 3 Pausen wo sich minutenlang nichts getan hat, hat er den Befehl mit Code 1 abgebrochen. Hier die letzten Zeilen des Protokolls:
    copying src/lxml/includes/lxml-version.h -> build/lib.linux-armv7l-3.7/lxml/includes                                                                                                                                                       
    creating build/lib.linux-armv7l-3.7/lxml/isoschematron/resources                                                                                                                                                                           
    creating build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/rng                                                                                                                                                                       
    copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/rng                                                                                                             
    creating build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl                                                                                                                                                                       
    copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl                                                                                                                 
    copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl                                                                                                                 
    creating build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                                                                                                                   
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                                 
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                               
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                 
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                           
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                               
    copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-armv7l-3.7/lxml/isoschematron/resources/xsl/iso-schematron-xslt1                                                                           
    running build_ext                                                                                                                                                                                                                           
    building 'lxml.etree' extension                                                                                                                                                                                                             
    creating build/temp.linux-armv7l-3.7                                                                                                                                                                                                       
    creating build/temp.linux-armv7l-3.7/src                                                                                                                                                                                                   
    creating build/temp.linux-armv7l-3.7/src/lxml                                                                                                                                                                                               
    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DCYTHON_CLINE_IN_TRACEBACK=0 -I/usr/include/libxml2 -Isrc -Isrc/lxml/incl
udes -I/usr/include/python3.7m -c src/lxml/etree.c -o build/temp.linux-armv7l-3.7/src/lxml/etree.o -w                                                                                                                                           
    arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-armv7l-3.7/src/lxml/etree.
o -lxslt -lexslt -lxml2 -lrt -lz -lm -o build/lib.linux-armv7l-3.7/lxml/etree.cpython-37m-arm-linux-gnueabihf.so                                                                                                                               
    /usr/bin/ld: cannot find -lz                                                                                                                                                                                                               
    collect2: error: ld returned 1 exit status                                                                                                                                                                                                 
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1                                                                                                                                                                         
                                                                                                                                                                                                                                               
    ----------------------------------------                                                                                                                                                                                                   
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-lc23qcqh/lxml/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))"
install --record /tmp/pip-record-ssjpq1kw/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-install-lc23qcqh/lxml/