Synology-Forum.nl
Packages => 3rd party Packages => Overige 3rd party packages => Topic gestart door: harry440 op 25 oktober 2014, 12:12:14
-
Mijn DSM heeft een update van Python3 uitgevoerd naar versie 3.4.
Bij uitvoeren script in Python 3 werkt de module 'serial' ineens niet meer.
Geprobeerd Pyserial2-7 opnieuw te installeren, maar komt nu met de foutmelding:
error: invalid Python installation: unable to open /volume1/@appstore/py3k/usr/local/include/python3.4m/pyconfig.h (No such file or directory)
De directory /include/python3.4m bestaat niet eens en ik kan het bestand pyconfig.h nergens ergens anders vinden.
Wat is er dramatisch veranderd in Python 3.4 en hoe kan ik dit oplossen? Heb Pyserial nodig om mijn slimme meter uit te lezen en het script daarvoor moet via Python3 lopen.
-
Welke versie van Python gebruik je eigenlijk?
Die van de synocommunity of die van Synology?
Serial2-7 draait volgens mij ook onder python2 en die kun je apart installeren.
-
Geinstalleerde versie via Packagecenter. 3.4.1-0028.
Pyserial draait inderdaad prima in via Python2, maar in Python3 dus niet. Heb Python3 wel nodig om een bepaald script de draaien dat onder Python2 niet wil.
-
Je kunt zonder problemen python 2 en python 3 beiden op je Nas geinstalleerd hebben.
Je moet alleen de juiste aanroep (e.g python2 of python3) gebruiken voor het opstarten van je python script(applicatie).
-
Wellicht is mijn vraag niet helemaal duidelijk.
Ik heb zowel Python2 als 3 geinstalleerd en dit draait verder goed.
Voor het uitvoeren van het Python script moet ik Python3 gebruiken.
Nu Python3 naar versie 3.4 is geupdate, krijg ik PySerial2-7 niet meer geinstalleerd.
Dus PySerial werkt wel met Python2 maar niet meer met Python3 na de update.
De vraag is dus hoe je Pyserial2-7 werkend krijgt met referentie naar mijn eerste post.
-
Als ik het dus goed begrijp heb je een python script dat alleen onder python 3 draait en daarin wordt PySerial aangeroepen en die wil niet met deze versie van python 3 draaien.
Aan je foutmelding te zien wil python3 zelf niet goed opstarten.
Ik zou python 3 verwijderen en opnieuw installeren.
Eigenlijk zou ik je aanraden python3 van de synocommunity te nemen en niet die van Synology zelf. Die laatste mist nogal eens wat libraries en bij de synocommunity is er actief support.
-
Ben(V), bedankt voor de tip. Ik ga dit testen en laat weten wat de uitkomst is.
-
ok succes
Mag ik vragen wat voor hardware je gebruikt ?
Een usb naar serial device? Welk type?
-
FT232 USB-Serial (UART) IC - Future Technology Devices International, Ltd
-
Inmiddels Python en Python3 via Synocommunity geinstalleerd. In Package Center staat aangegeven dat beide applicaties draaien, alleen in Putty de volgende meldingen bij uitvoeren Python en Python3, zie afbeelding.
Geen idee wat nu te doen...
-
Iemand een idee?
-
Je moet wel het pad opgeven naar waar python staat.
Dus voor python3 is dat:
/volume1/@appstore/python3/bin/python3
Voor python2 is dat:
/volume1/@appstore/python/bin/python2
Er van uit gaande dat je de packages op volume1 hebt geinstalleerd.
-
Dank. Hoe bedoel je het pad opgeven? Bij elk commando om een script te draaien of ergens 1-malig zodat het programma overal wordt gevonden?
-
Kan beiden.
Je kunt het commando geven:
/volume1/@appstore/python3/bin/python3 /volume1/<directory>/script.py
Of je kunt /volume1/@appstore/python3/bin/ toevoegen aan the path enviroment variable en dan wordt het commando:
python3 /volume1/<directory>/script.py
Hoe je de path variable in linux uitbreid zodat hij ook na een reboot blijft bestaan weet ik niet. Zo ver gaat m'n linux kennis niet maar google kan je vast wel helpen.
-
Hoe je de path variable in linux uitbreid zodat hij ook na een reboot blijft bestaan weet ik niet.
Toevoegen in /etc/profile (system-wide .profile file for ash)
-
Dank allen. Heb weer heel wat geleerd. Ik kan dus concluderen dat het installeren van Python via Synology deze instellingen zelf aanmaakt, Python via Synocommunity niet.
Ga het proberen!
-
Ik weet niet of dat ook in DSM5.0 is maar, in 5.1 heb je ook nog een standaard Python ;) :
DS111> python
Python 2.7.8 (default, Aug 28 2014, 20:19:31)
[GCC 4.6.4] on linux2
Waarvan ook een Beta ter beschikking is:
[attachimg=1]
-
Het wil allemaal voor geen meter, wou dat de automatische update naar Python 3.4 nooit had plaatsgevonden.
- Als ik Python2 via Synocommunity installeer, krijg ik de foutmelding 'error while loading shared libraries'
- Python2 via Synology draait goed, Pyserial draait goed
- Python3 via Synocommunity draait goed
- Python3 via Synology mist het bestand 'pyconfig.py' Maar zelf het bestand toegevoegd en Pyserial2-7 wil nu wel installeren, maar...
- Tijdens de installatie van Pyserial2-7 komen allemaal bugs voorbij.
Het compileren van een Python2 naar Python3 script in versie Python3.4 gaat dus fout? 2to3?
-
Je probeert de windows installer te runnen op je synology dat gaat nooit werken.
Je moet het source package hebben en die zelf installeren.
-
Maar ik gebruik pyserial-2.7.tar.gz (md5), uitpakken en installeren met commando:
'Python3 setup.py install'.
Dus is niet de Windows installer, wat gaat er dan fout?
-
Geen idee maar ik zie toch duidelijk dat je serialwin32.py probeert te draaien.
-
Je moet die tar zelf uitpakken en ergens neerzetten.
Dan moet je met Putty in die directory gaan staan.
Als je dan een ls commando geeft, moet je daar setup.py zien staan.
Vervolgens geeft je het commando:
/volume1/@appstore/python3/bin/python3 setup.py install
PS Zorg er wel voor dat je met putty als root bent ingelogd niet als admin (voor beiden geld hetzelfde password).
-
Ik heb persoonlijk wat moeite met het uit elkaar houden van wat je nu naast elkaar aan het testen bent en wat er in je screenshots staat (de commando's staan er niet altijd in, geloof ik)
Onderstaand is gedaan met het Python3 package van SynoCommunity. Daarvan weet ik dat het werkt, en daarnaast mist het Synology package wat modules die ik hieronder gebruik.
Eerst zet ik een virtualenv op, in `/volume1/pyserial`. Dit is optioneel, maar wel een goed idee. Je krijgt als het ware een kopie van Python in de /bin folder van je virtualenv, en er is een scheiding met andere Python installaties (het oorspronkelijke Python package blijft wel nodig). Dus:
DS4458> /usr/local/python3/bin/python3 /usr/local/python3/bin/virtualenv /volume1/pyserial/env
Using base prefix '/usr/local/python3'
New python executable in /volume1/pyserial/env/bin/python3
Also creating executable in /volume1/pyserial/env/bin/python
Installing setuptools, pip...done.
Hierna installeer ik pyserial dmv `pip`. Stukken makkelijker dan downloaden van een tar, uitpakken en installeren. We willen wel `pip` in de venv gebruiken, niet de system-wide pip of die van een ander package, vandaar het pad.
Pip en het vorige commando, virtualenv, zitten niet in het Synology Python package, mede daarom gebruik ik het package van SynoCommunity.
DS4458> cd /volume1/pyserial #de venv die we hiervoor maakten, zit dus in de /env dir
DS4458> ./env/bin/pip install pyserial
Downloading/unpacking pyserial
Downloading pyserial-2.7.tar.gz (122kB): 122kB downloaded
Running setup.py (path:/volume1/pyserial/env/build/pyserial/setup.py) egg_info for package pyserial
Detected Python 3, using 2to3
Installing collected packages: pyserial
Running setup.py install for pyserial
Skipping implicit fixer: buffer
Skipping implicit fixer: idioms
Skipping implicit fixer: set_literal
Skipping implicit fixer: ws_comma
changing mode of build/scripts-3.4/miniterm.py from 644 to 755
Skipping implicit fixer: buffer
Skipping implicit fixer: idioms
Skipping implicit fixer: set_literal
Skipping implicit fixer: ws_comma
Detected Python 3, using 2to3
changing mode of /volume1/pyserial/env/bin/miniterm.py to 755
Successfully installed pyserial
Cleaning up...
Nu kunnen we controleren of serial te importeren is. Dit heeft geen praktische waarde overigens, maar het kan helpen met troubleshooten. We openen een Python console (in de virtualenv), daarna importeren we serial:
DS4458> ./env/bin/python
Python 3.4.1 (default, Sep 16 2014, 08:14:00)
[GCC 4.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>>
<ctrl-D> om de console te verlaten. Geen foutmelding, import is dus goed gegaan.
Ook kunnen we miniterm aanroepen:
DS4458> ./env/bin/miniterm.py
--- Available ports:
--- /dev/ttyS0 ttyS0
--- /dev/ttyS1 ttyS1
Als ik het goed begrijp gebruik je weer een ander script om miniterm oid aan te roepen? Dan kun je dat script aanroepen via /volume1/pyserial/env/bin/python <jouw_script.py> (rekening houdende met de virtualenv). Mocht dat niet werken, dan even de foutmelding + naar een online kopie van dat script linken, dat is makkelijker te reproduceren.
-
Dank DrBean, ik ga dit uittesten!! Ik laat weten hoe het afloopt!
-
DrBean, ik heb getest en HET WERKT! Super bedankt voor de hulp!! Import Serial werkt en ik kan mijn slimme meter weer uitlezen. Ging ik toch de mist in om de PySerial 'zelf' te installeren in plaats van via PIP.
Blij met Linux / Synology experts zoals jullie. :)
-
Nou, perfect :) Om het verhaal dan helemaal compleet te maken: handmatig downloaden, uitpakken en setup.py draaien werkt ook hoor :P
We maken een nieuwe venv:
DS4458> rm -rf ./env/
DS4458> /usr/local/python3/bin/python3 /usr/local/python3/bin/virtualenv /volume1/pyserial/env
Using base prefix '/usr/local/python3'
New python executable in /volume1/pyserial/env/bin/python3
Also creating executable in /volume1/pyserial/env/bin/python
Installing setuptools, pip...done.
We downloaden pyserial:
DS4458> wget https://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz#md5=794
506184df83ef2290de0d18803dd11
--2014-11-03 20:47:46-- https://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz
[knip]
2014-11-03 20:47:47 (741 KB/s) - 'pyserial-2.7.tar.gz' saved [122081/122081]
We pakken het uit:
DS4458> tar -xvzf pyserial-2.7.tar.gz
pyserial-2.7/
[knip]
pyserial-2.7/README.txt
We gaan de folder in, je kunt hier niet met subfolders werken, en we draaien setup.py. De `../` is dus om een dir extra omhoog te gaan, je kunt ook het volledige pad kiezen: precies hetzelfde.
DS4458> cd pyserial-2.7/
DS4458> ../env/bin/python setup.py install
Detected Python 3, using 2to3
/usr/local/python3/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'use_2to3'
warnings.warn(msg)
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/serial
copying serial/serialcli.py -> build/lib/serial
[knip]
copying build/lib/serial/urlhandler/protocol_hwgrep.py -> /volume1/pyserial/env/lib/python3.4/site-packages/serial/urlhandler
byte-compiling /volume1/pyserial/env/lib/python3.4/site-packages/serial/serialcli.py to serialcli.cpython-34.pyc
[knip]
byte-compiling /volume1/pyserial/env/lib/python3.4/site-packages/serial/urlhandler/protocol_hwgrep.py to protocol_hwgrep.cpython-34.pyc
running install_scripts
copying build/scripts-3.4/miniterm.py -> /volume1/pyserial/env/bin
changing mode of /volume1/pyserial/env/bin/miniterm.py to 755
running install_egg_info
Writing /volume1/pyserial/env/lib/python3.4/site-packages/pyserial-2.7-py3.4.egg-info
We gaan de dir weer uit, en we importeren serial eens:
DS4458> cd ../
DS4458> ./env/bin/python
Python 3.4.1 (default, Sep 16 2014, 08:14:00)
[GCC 4.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>>
Dus dat werkt ook wel.
-
Jeetje :lol: Bedankt voor het bewijs en ik heb van beide instructies een document aangemaakt.