IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Quelques clarification sur les versions de Python


Sujet :

Python

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut Quelques clarification sur les versions de Python
    Bonjour à tous,

    J'utilise un code Python pour calculer la qualité de l'air.
    J'arrive le faire tourner sur un Rapsberry après avoir fait ceci

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chmod +x aqi.py
    sudo ./aqi.py
    PM2.5:55.3, PM10:47.5
    PM2.5:55.5, PM10:47.7
    PM2.5:55.7, PM10:47.8
    PM2.5:53.9, PM10:47.6
    PM2.5:53.6, PM10:47.4
    PM2.5:54.2, PM10:47.3
    Sur le Raspberry, j'avais développé un code, grâce à Adafruit, pour afficher du texte sur un écran LCD.

    Le but de mon exercice est d'ajouter le code du LCD au code aqi.py, et je pense avoir des problèmes de version de Python, et je vais essayer de clarifier ma situation avec des questions et suggestion.

    Premièrement, ces deux commandes m'exécute le code aqi.py
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sudo ./aqi.py
    sudo python aqi.py

    Par contre
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo python3 aqi.py
    me retourne une erreur

    File "aqi.py", line 130, in <module>
    cmd_set_sleep(0)
    File "aqi.py", line 104, in cmd_set_sleep
    ser.write(construct_command(CMD_SLEEP, [0x1, mode]))
    File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 518, in write
    d = to_bytes(data)
    File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes
    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
    TypeError: unicode strings are not supported, please encode to bytes: 'ª´\x06\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ÿÿ\x06«'
    Q1: Je pense que cela m'indique que le code n'a pas été développer pour Python3 et que la fonction cmd_set_sleep est la source de mon erreur? (j'aimerais bien avoir tout fonctionnant avec Python3.

    Je continue sur le code LCD avant de revenir sur l'app AQI.
    J'ai développe un petit code pour envoyer des messages LoRaWAN, qui fonction qu'avec Python trois.
    Ceci
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo python radio_rfm9x.py
    me retourne
    Traceback (most recent call last):
    File "radio_rfm9x.py", line 10, in <module>
    import busio
    ImportError: No module named busio
    alors que
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo python3 radio_rfm9x.py
    fonctionne.

    Malheureusement et idiotement, je ne retrouve pas (pour le moment) mes notes qui me parle de busio, mais je vais retrouver cela

    Q2: Je pense que j'ai du installer busio pour python3 et pas pour python2.7. Il faudrait donc je le l'installe ainsi

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    pip install Adafruit-Blink

    au lieux de

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    pip3 install Adafruit-Blinka
    ?

    Si maintenant, je reviens su mon code aqi.py

    J'ai ajouté ceci

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # Import Blinka Libraries
    import busio
    from digitalio import DigitalInOut, Direction, Pull
    import board
     
    # Create the I2C interface.
    i2c = busio.I2C(board.SCL, board.SDA)
     
    # 128x32 OLED Display
    import adafruit_ssd1306
    display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
    # Clear the display.
    display.fill(0)
    display.show()
    width = display.width
    height = display.height
     
    # Puis plus bas dans le code
     # draw a box to clear the image
        display.fill(0)
        display.text('AQI', 35, 0, 1)

    (Je précise que ceci fonctionne sur mon Raspberry pour un autre Script)


    Ceci (et)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sudo ./aqi.py
    sudo python aqi.py
    me retourne
    Traceback (most recent call last):
    File "radio_rfm9x.py", line 10, in <module>
    import busio
    ImportError: No module named busio
    Ce qui reforce ma suspicious quant à busio que ne fonctionne que pour Python3.x

    Si je fais

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sudo python3 aqi.py
    J'ai encore le même problème qu'avant, concernant cmd_set_sleep(0)

    Ma question est donc
    Q3: Comment rendre tous ce code compatible avec Python3 et python2, mais en tout cas avec Python3.
    Q4: Est ce que dans ce code, il y a quelque chose qui indique qu'il ne fonctionne qu'avec Python2.x?
    Q5: Je suppose que sudo ./aqi.py est égal à python aqi.py, mais comment faire pour que ./aqi.py soit exécuté avec python3?

    Je vous remercie pour vos clarifications

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Salut,

    Citation Envoyé par pierrot10 Voir le message
    Q4: Est ce que dans ce code, il y a quelque chose qui indique qu'il ne fonctionne qu'avec Python2.x?
    Ligne 5 vous avez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from __future__ import print_function
    qui indique que ce code a été développé pour Python2.
    Et les erreurs que vous avez en le lançant sur Python3 montrent qu'il n'a pas été revu pour tenir compte des changements côté chaines de caractères par cette nouvelle version (de Python).

    Citation Envoyé par pierrot10 Voir le message
    Q3: Comment rendre tous ce code compatible avec Python3 et python2, mais en tout cas avec Python3.
    Comme il s'agit de code que vous n'avez pas développé par vous même, il faudrait déjà commencer par vérifier si les développeurs des différentes bibliothèques utilisées ont des moutures compatibles Python 3 (et éventuellement Python 2).

    Sinon, vous pouvez chercher des bibliothèques qui réalisent les mêmes fonctionnalités ou réaliser le portage par vous même.

    - W

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 098
    Points : 946
    Points
    946
    Par défaut
    Bonjour
    merci pour votre réponse.

    Il semble que cette librairie n'a pas été développée pour Python3.

    Sur mon raspberry, j'ai regardé l'history et j'ai en effet fait les installations avec pip3.

    Concernant ce message d'erreur

    File "aqi.py", line 130, in <module>
    cmd_set_sleep(0)
    File "aqi.py", line 104, in cmd_set_sleep
    ser.write(construct_command(CMD_SLEEP, [0x1, mode]))
    File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 518, in write
    d = to_bytes(data)
    File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes
    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
    TypeError: unicode strings are not supported, please encode to bytes: 'ª´\x06\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ÿÿ\x06«'
    j'ai un peu chercher et je pense que les caractères qui sont envoyés doivent être encodés (encode())

    le problème devrait venir d'ici

    https://github.com/zefanja/aqi/blob/...hon/aqi.py#L84
    et d'ici
    https://github.com/zefanja/aqi/blob/...hon/aqi.py#L36

    Le truc que je doute, c'est que je ne sais pas trop comment "encoder".
    J'aurais tendance à le faire au niveau de cmd_set_sleep() mais ceic me semble pas très fonctionnelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ser.write(construct_command(CMD_SLEEP, [0x1, mode]).encode())

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Salut,

    Citation Envoyé par pierrot10 Voir le message
    Le truc que je doute, c'est que je ne sais pas trop comment "encoder".
    Vous n'expédiez pas une chaine de caractères mais une suite d'octets: il n'y a rien à encoder, il faut juste la construire "correctement". Et si c'est le boulot de la fonction construct_command, il faudrait commencer par là.

    - W

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Deux autres choses, tu n'as aucun besoin de rendre ce code exécutable et certainement aucune raison de le lancer avec les droits admin.

Discussions similaires

  1. Quelques questions sur les LOB
    Par Wurlitzer dans le forum Oracle
    Réponses: 2
    Dernier message: 14/06/2006, 17h32
  2. Quelques informations sur la version "entreprise"
    Par assos dans le forum Mandriva / Mageia
    Réponses: 1
    Dernier message: 20/02/2006, 17h40
  3. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo