Problème suite mise à jour / dépendances ko

Moi je suis pas développeur, mais ici c’est un problème de dépendances sur des packages python qui sont développés par d’autres, et dans ce cas précis un développement rust à l’intérieur du package python. Le développeur du plugin ne peut pas faire de miracles non plus, et j’avoue que c’est un sacré bazar tout le système python 2, 3, les pip, etc… et en plus ça dépend des OS, des versions de linux, etc…
et ceux de cryptography te diront que ça marche très bien, il « suffit » d’avoir rustc >1.48 .-).

personellement que cryptography soit en v35 ou v38 m’importe peu sur mon système. Si ça permet de builder avec rustc 1.41…

J’aimerais surtout pouvoir à terme passer en bullseye 11.x et avoir un jeedom fully compatible (je parle des plugins).

ps. j’aurais bien aimé comprendre pourquoi l’install de rustc avec rustup n’est pas « vue » par pip3, malgré le changement des PATHs, etc… mais là j’ai plus de temps à mettre dessus.

Bonjour @lunarok, pourrais-tu jeter un oeil expert. Stp

1 « J'aime »

j’ai bien fait de passer aussi : dépendances en vrac comme décrit sur le fil, mais le plugin semble fonctionner correctement. Je n’avais pas MAJ depuis un moment, en voyant la numérotation je me suis dit qu’il était temps…
wait&see.

J’ai le meme souci après la MàJ
Y a-t-il un moyen de revenir à la version precedente du plugin ?
Avec une ancienne sauvegarde ?

Pour l’instant perso j’attends un retour du dev s’il peut faire quelque chose sinon je tenterai la version expliqué au dessus par @cgail914 de d’installer une version spécifique de cryptography

1 « J'aime »

Bon j’ai trouvé plus simple pour installer la dernière version de cryptography, mais il faut installer rustc avec le compte root, des sudo depuis le compte utilisateur ne suffisent pas. C’est probablement plus « propre » que de downgrader cryptography même si ça marche très bien.

  1. on enlève rustc si installé par le package manager
    sudo apt-get remove rustc

  2. on se loggue en root
    sudo su -

  3. on installe rustc avec rustup (root)
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

  4. on modifie la variable d’environnement PATH (root)
    . "$HOME/.cargo/env"

  5. on ré-installe le package cryptography avec pip3 (root)
    python3 -m pip uninstall cryptography
    python3 -m pip install --upgrade cryptography

sur mes 2xrpi3 et 1xrpi4 en 10.x ça recompile et ça fonctionne.

1 « J'aime »

Bonjour,

Merci pour tes tests et recherches, la commande d’installation rustc doit t’installer la version 1.64 et non la 1.48, pas gênant ?

1 « J'aime »

la dépendance c’est >= 1.48. Donc oui, c’est bon.

Il faut rester en root pour installer cryptography et déployer la variable d’env ? ou on se remet avec le compte pi ?

rester en root.

Je savais bien que je n’aurais pas du lancer l’update du plug-in Xiaomi :frowning:

Une recherche rapide sur packages.debian.org montre que libstd-rust-1.48 n’est fourni qu’avec Debian Bullseye (11.x) et pas Buster (10.x).

Comme le plugin installe les package pip sous le compte root, on a droit à l’habituel warning:

WARNING: Running pip as the ‹ root › user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: 12. Virtual Environments and Packages — Python 3.12.2 documentation

L’erreur d’install sur python-miio pointe vers une erreur lors de l’upgrade de cryptography.
L’erreur en tentant d’abord l’upgrade de cryptography seul pointe vers setuptools et Rust donc on va tenter d’abord:

sudo pip3 install setuptools-rust

Si on retente l’upgrade de cryptography les messages d’erreur indiquent maintenant clairement qu’il lui faut le compilateur rustc et la version 1.48

La doc d’installation de cryptographie pointe vers le probable besoin d’installer manuellement la bonne version de Rust (et confirme le besoin de Rust 1.48 pour cryptography 38.0.1):

https://cryptography.io/en/38.0.1/installation/#rust

On tente donc une installation manuelle de Rust dans un shell root complet:

sudo su -
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Comme indiqué dans la doc, les binaires sont générés dans un répertoire spécifique sans lien symboliques dans dans /usr/bin, donc si on tente de nouveau un sudo pip3 install cryptography depuis un shell utilisateur, ça ne trouve pas rustc (car $PATH reste celui de l’utilisateur courant et pas la version qui contient le répertoire d’install de rust).

On passe donc de nouveau par un shell root complet pour mettre à jour cryptography:

sudo su -
pip3 install --no-cache-dir --upgrade cryptography

Ca compile pendant pas mal de temps, mais ça se termine sans erreur cette fois!

On quitte le shell root et on retente l’installation de python-miio

sudo pip3 install --no-cache-dir --upgrade python-miio

Et cette fois-ci tout se passe sans souci, les dépendances sont corrigées.

A priori cela devrait surement aussi fonctionner en installant Rust sous le compte utilisateur classique (le compilateur n’étant utilisé que lors de l’install du module cryptography).

Conclusion: le script d’install manque de quoi installer correctement les dépendances Rust. J’imagine que le plug-in a du être migré/validé sur Python3 dans une Debian 11 ou que les dernières versions n’ont pas été testées sur un Debian 10 « propre » :frowning:

3 « J'aime »

Merci, tout a très bien marché sur une buster (Orange Pi PC Plus)
Bizarrement, une bullseye avait le meme probleme de MàJ des dependances
Attention : la manip a augmenté mon utilisation disque de 1Go (sur 7Go) j’ai l’impression que l’installation de Rust prend 1Go d’espace disque

Avant de lancer l’installation de Rust il faut le desinstaller avant ? (j’ai la version 1.41 actuellement)
sudo apt-get remove rustc

Bonjour,

Je bloque sur
sudo pip3 install --no-cache-dir --upgrade python-miio

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
markdown 3.4.1 requires importlib-metadata>=4.4; python_version < "3.10", but you have importlib-metadata 1.7.0 which is incompatible.
flask 2.2.2 requires importlib-metadata>=3.6.0; python_version < "3.10", but you have importlib-metadata 1.7.0 which is incompatible.
Successfully installed android_backup-0.2.0 appdirs-1.4.4 attrs-22.1.0 backports.zoneinfo-0.2.1 croniter-1.3.7 defusedxml-0.7.1 importlib_metadata-1.7.0 micloud-0.5 netifaces-0.11.0 pycryptodome-3.15.0 python-miio-0.5.12 pytz-deprecation-shim-0.1.0.post0 tzdata-2022.4 tzlocal-4.2
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

J’ai fais et cela ne fonctionne pas
pip install importlib-metadata==4.4

1 « J'aime »

pip3 install importlib-metadata==4.8 a corrigé le probléme

Bonjour j’ai passé les commandes de @GreenSkol le plugin fonctionne avec les dépendances merci par contre dans mon environnement (hors root) si je passe la commande rustc --version il ne trouve pas (cela fonctionne en root)
image

en root :
image

C’est lié à la variable environnement dans le PATH il faut passer quel commande pour rétablir ? merci

Et pour ceux qui ont cassé leur commande certbot (letsencrypt) en passant à cryptography 0.38.x, il suffit de mettre à jour la librairie pyOpenSSL :

sudo pip3 install pyOpenSSL --upgrade

1 « J'aime »

Merci à toi mais j’ai passé la commande sudo certbot renew et je n’ai pas de message particulier hormis que mon certificat toujours valide… Tu as eu quoi comme message ?

1 « J'aime »

Bonjour, j’ai le meme pb depuis ce matin
j’ai essayer la méthode de @cgail914 mais lorsque je lance la commande :
sudo pip3 install python-miio

j’ai l’erreur :
Attempting uninstall: PyYAML
Found existing installation: PyYAML 3.13
ERROR: Cannot uninstall ‹ PyYAML ›. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

et je ne suis pas assez calé en unix pour tout comprendre …
( je suis sur une VM sur Freebox delta )

1 « J'aime »

est-ce que PyYAML vient d’un package de ta distribution (p.ex. python3-yaml en 3.13 sur Buster) ? (et pas de pip3)

quel est l’output de :
sudo apt list --installed | grep yaml

tu es sur quel OS ?

dernière version de pip3 ?
sudo pip3 -V