Problème pour demarrer un code avec Python

Bonjour, j’essaie de faire un suivi d’objet avec une webcam, et je recopie un code ,cependant quand j’essaie d’installer cv2 d’open cv, je n’obtiens que des erreurs…
étant débutant en python, je pense que quelque chose m’échappe,
je vous mets ce que j’ai à ma disposition (le forum dit que je peux n’en mettre qu’un seul, aussi j’ai regroupé 2 images )
Merci pour vos conseils

Bonjour,

L’utilitaire pip est un programme à part entière et non une instruction Python.
Il faut ouvrir une invite de commande sur le système d’exploitation pour pouvoir exécuter pip, cela se fait en dehors de l’interpréteur Python.

Comme sur l’image de droite où tu fais le pip list.

Je plussoie Entwanne, mais, vu ton niveau de débutance, se pose la question: est-tu conscient que:

  • sans environnement virtuel, tes installations vont se faire dans l’environnement principal, au risque que l’installation d’une librairie plus récente que celle en cours risque de perturber d’autres utilitaires?
  • plusieurs solutions, vaguement compatibles, permettent de gérer de tels environnements virtuels, sans grande difficulté?

Une question, maitenant, aux utilisateurs expérimentés: est-ce une bonne idée de “charger la barque” d’un débutant, avec cette notion?

1 « J'aime »

@pierre.imbaud Personnellement, je pense que c’est une des premières choses à apprendre et comprendre en Python :slight_smile:

Et, en musique, je suppose que tu considères que le solfège est une des premières choses à apprendre? Au risque de dégouter les élèves?

Bon, excuse mon ton caustique, je ne voulais surtout pas être désagréable. Je ne vois pas non plus qu’on puisse aller très loin sans ça.

J’ai commencé Python dans les années 2000; au début, et pendant longtemps, la simplicité a été l’argument massue en faveur de python. Simplicité qui a peu a peu reculé, avec des solutions surpuissantes comme le fonctionnel, les context managers, et tant d’autres.

Si aujourd’hui on ne peut plus dire que python est simple, il reste… la solu la plus simple. Ou plutôt la solu la plus simple avec une telle couverture (j’entends: nombre de problèmes qu’elle peut adresser).
Mais je sors du cadre de la discussion. Merci pour ton retour!

Je pense que les débutants autodidactes peuvent se passer de venv quelque temps, depuis que pip installe par défaut dans le home de l’utilisateur.

Pas de sudo pas de problèmes.

Le seul problème est que ~/.local/bin n’est pas dans le PATH du débutant, donc pour des libs ça va, pour des programmes (pylint, black, …) ça ne va pas.

Apprendre à configurer son PATH ne me semble pas plus facile qu’apprendre à utiliser un venv, donc le jour où le débutant veut installer un programme via pip, hop : venv.

Pour les débutants accompagnés, ça me semble une bonne idée d’enseigner le venv avant pip.

2 « J'aime »

mdk l’a écrit bien mieux que je ne l’aurais fait.

Mais @pierre.imbaud pour répondre à ta question, je pense que le venv est loin d’être aussi rébarbatif que le solfège pour la musique.
Et même si le solfège est rébarbatif on peut l’enseigner en parallèle pour donner des bases et avoir aussi le côté fun de jouer de la musique.

Idem pour Python.

Moi perso je saurais trop conseiller aux débutants de commencer dans une VM sous linux…
On comprend mieux ce qu’on fait. Maintenant ça fait un moment que je n’ai plus fait de python sous windows.

installe virtual box, installe toi une VM genre ubuntu.
ça a l’intérêt de t’initier à Linux et à la ligne de commande posix si tu connais pas.
Ensuite tout est facile (vraiment)

Sinon si tu as un version moderne de python (3.9 ça va…). Créer le virtualenv:

python -m venv [le chemin vers ton env]

dison que tu as mis ./mon_env comme chemin, pour l’activer:

source ./mon_env/bin/activate

ça fonctione comme ça sous linux.

Sous windows il faut juste exécuter:

mon_env\Scripts\activate.bat

le doc est là:

Et si tu te demande ce que peut bien être ce virtual env n’hésite pas à poser la question. C’est pas bien compliqué et effectivement c’est assez essentiel.

Bonsoir,

Quand je clique pour ouvrir une invite de commande sur le système d’exploitation pour pouvoir ouvrir ou exécuter pip, cela ne se passe pas comme prévu : le rectangle noir (je ne sais pas comment ça s’appelle ) apparait mais même pas une seconde ,puis disparait de l’écran , que cela signifie-t-il ?,et que faire?
de plus je vous joins la capture d’écran quand je mets ’ ouvrir l’emplacement du fichier pip’
Merci d’avance

(pièces jointes)

Pourtant sur ta première capture d’écran tu montrais que tu avais bien réussi à ouvrir l’invite de commandes et à y enter pip list.

faut l’exécuter depuis le shell. (Le rectangle noir c’est le shell ou l’invite de commande). Je pense que quand tu cliques dessus il t’ouvre l’invite de commande pour éxécuter le script pip il le fait puis il ferme la fenêtre.

On peut pas avoir un vrai shell maintenant sous windows ?

Merci à vous,
Donc , c’est quoi ce virtual env ?
Je suis preneur de toutes les explications

mon problème,c’est que j’essaie de programmer un robot pour qu’il suive un objet coloré ,en utilisant une webcam avec une rasberry-py .
la programmation n’étant pas mon métier du tout ,j’ai trouvé un tuto avec code simple en python (https://www.youtube.com/watch?v=aFNDh5k3SjU)
et dès le début je bloque sur ce problème…
pour les moteurs de mon robot , j’ai programmer en c++ (je me débrouille un peu en c++)avec arduino ,car il y a des bras robotiques pour effectuer plusieurs chose ; j’aurai bien fait avec arduino et c++, mais cela ne convient pas pour la détection et le suivi d’objet .
Je vous remercie pour votre soutien

1 « J'aime »

Ok alors un virtualenv c’est un environnement virtuel permettant d’isoler les dépendances d’un projet afin qu’elle n’interfère pas avec les dépendances d’un autre projet ou avec les paquets python du système sur windows je ne pense pas qu’il y en est mais linux en utilise beaucoup.

Comme ton système cible est un raspberry le mieux est de coder ton truc sous linux car je ne pense pas que ton raspberry tourne sous windows. Donc le mieux c’est de commencer soit depuis une VM linux soit carrément depuis le raspberry.

Comment tu accèdes au raspberry ? c’est quoi qui est installé dessus ?

tu utilises raspbian ?

la programmation n’étant pas mon métier du tout ,j’ai trouvé un tuto avec code simple en python

(Tu noteras que le gars de la vidéo est sous Linux)

Tu as l’air de te débrouiller en anglais, le lien que je t’ai donné vers la doc de virtualenv n’est pas traduite mais si tu comprends l’anglais les explication sont assez limpides.

Pour le raspberry, si tu as une distri avec un environnement de bureau complet, c’est assez facile de te lancer. Tu as juste à connecter un écran un clavier et tout coder depuis le raspberry. (Il y a des éditeurs faciles à prendre en main sous linux, Kate, Gedit).

Si tu as que le shell ça va être un peu plus compliqué. mais pas insurmontable. Le plus simple c’est d’utiliser un repo github coder depuis une VM sous linux pousser sur github et retirer depuis le raspberry. Sinon tu peux utiliser scp ou autre. Un truc qui marche assez bien si tu veux pas t’embêter avec git et GH c’est d’utiliser fossil qui embarque un serveur, c’est pratique pour synchroniser ton code entre le raspberry et ta vm.

Un dossier.
Un dossier qui contiendra tout ce que tu vas installer avec pip.
Avantages : tu sais que ce que pip installe va dedans et uniquement dedans (pas un peu dans Program Files, un peu dans la base de registre, un peu par ci, un peu par là, non, rien en dehors du dossier. Donc pour tout désinstaller (quand on a tout cassé) c’est simple : supprimer le dossier.

Je suis preneur de toutes les explications

Ça se crée avec python3 -m venv depuis un émulateur de terminal.

Le truc noir, c’est ça, un émulateur de terminal. Sur Windows y’a cmd.exe mais je crois que Microsoft ne le maintient plus depuis qqch comme 13 ans. Sur Windows y’a aussi powershell mais personne n’y comprend rien vu qu’ils ont inventé une nouvelle syntaxe qui n’est compatible avec aucun autre shell.

Si tu veux un émulateur de terminal plus moderne tu as trois choix :

  • Arrêter de croire ce que disent les commerciaux de chez Microsoft (je sais, c’est dur, ils sont forts !), et donc arrêter d’utiliser leur OS, installe une Debian ou une Fedora (ceci n’est pas un troll, 100% du top 100 des supercalculateurs tournent sur Linux, 96% des sites webs sont hébergés sur Linux, Android c’est un Linux).
  • Garder Windows deux-trois jours de plus avant de craquer et utiliser WSL en attendant, WSL permet d’avoir une Debian (ou une Ubuntu ou un autre parfum de Linux) dans son Windows. Ça marche étonnamment bien.
  • Garder Windows deux-trois jours de plus avant de craquer et utiliser git bash en attendant, git bash c’est minimaliste, il manque plein de trucs, c’est pas fait pour faire autre chose que du git, mais ça marche déjà mieux que cmd.exe quand même.

Je suis preneur de toutes les explications

OK tu as un émulateur de terminal de qualité maintenant, on peut dire terminal pour gagner du temps. Dans l’émulateur de terminal tu vois des caractères, qqch comme jean@tamachine $, ça s’appelle le prompt c’est bien le terminal qui est chargé de l’afficher (la partie bête et méchante, le "je mets le j là, le e là, …), mais c’est le shell qui décide quoi afficher. bash c’est un shell, c’est celui que tout le monde utilise (sauf deux-trois barbus au fond qui utilisent zsh, et deux-trois vieux là bas qui utilisent csh, tcsh, et le hipster devant qui utilise fish).

Le shell c’est celui qui exécute un programme quand tu tapes son nom. Tu tapes python3 il cherche, trouve, et exécute Python.

Ça ressemble à ça :

jean@tamachine $ python3
>>> print(42)
42

1ère ligne le prompt finit par $, tu tapes python3 et hop il exécute Python. Python affiche un prompt différent, >>> pour le reconnaître.

pip est un programme aussi, comme python, donc pour exécuter pip il faut écrire pip dans le shell (et pas dans Python, donc après $ mais pas après >>>).

Tous ces programmes ne fonctionnent qu’en ligne de commande, il n’y a pas d’interface graphique, pas de fenêtres, tu ne peux donc pas les exécuter en double-cliquant dessus, il faut vraiment les invoquer par leur nom via un shell dans un terminal.

Je suis preneur de toutes les explications

On a jamais d’interface graphique parce que c’est incohérent (deux programmes fenêtrés n’ont pas les mêmes raccourcis claviers, pas les mêmes design, …). En ligne de commande il existe une cohérence basée sur “tout ce qu’on manipule est du texte, tout programme peut lire ce qu’un autre programme écrit et ils se comprennent tous car c’est juste du texte”. Sur cette fondation par exemple on peut écrire un programme qui cherche dans du texte, et une fois qu’on l’a écrit, c’est terminé, on l’a, on peut l’utiliser (il s’appelle grep, il existe depuis 1973, on l’utilise toujours, il a été amélioré depuis, il est poli comme un galet ! Son nom est historique, je sais que tu veux toutes les explications mais je vais prendre un raccourci, désolé). Dans un monde fenêtré, applicatif, graphique toutes les applications doivent recoder leur propre “recherche” (celle de chrome, de Firefox, de word, de libreoffice, sont toutes différentes). Quelle perte de temps, d’énergie de recoder encore et encore les mêmes fonctionnalités. Et quel inconfort pour l’utilisateur d’avoir a ré-apprendre à chaque nouveau programme comment fonctionnent toutes ces briques élémentaires.

D’ailleurs un programme Python c’est du texte. C’est cohérent on peut utiliser grep pour chercher dans un fichier .py. Non, un document Word ce n’est pas du texte c’est du XML encodé en UTF-32 stocké dans un zip. Essaye un jour c’est amusant, renomme un .docx en .zip et tu peux le décompresser pour voyager dedans. Mais ce n’est pas du texte donc aucun autre programme ne peut comprendre aisément un fichier docx, bouh, saymal.

Donc, tu as un terminal moderne, et un shell, tu sais démarrer un programme en tapant son nom, pour quitter Python essaye exit().

Maintenant que tu as tout ça tu peux créer des venvs, autant que tu veux, ce sont juste des dossiers, ça se fait en appelant python3 -m venv .venv.

le .venv a la fin est libre, tu peux écrire python3 -m venv coucou, c’est le nom du dossier qui sera crée, mais les devs ça manque d’inspiration, alors on l’appelle tous .venv. Tellement que les éditeurs de code cherchent si par hasard ils trouvent un dossier .venv et s’il est là ils l’utilisent sans qu’on ai rien a leur dire, c’est pratique. Fais comme tout le monde, nomme tes venvs .venv.

Je suis preneur de toutes les explications

OK le point au début du dossier, c’est parce que sur Linux on a pas le "clic-droit → propriété → fichier caché », sur Linux c’est une convention, pas une case a cocher. La convention c’est : si le dossier commence par point, alors il est caché. Et vu que les venvs c’est pas le plus important dans un projet, on aime bien le cacher un peu.

Bon tu as un venv, peut-être même 10 maintenant, moi j’en ai parfois 100 a force de tester des trucs par-ci par là, démarrer un projet, un autre, un autre, … Un venv contient un Python et tout ce qui est installé pour lui via pip.

Donc il va falloir dire a tout ce système quel Python il doit utiliser, donc quel venv il doit utiliser ! La machine ne peut pas deviner…

Alors on ne va pas dire ça au terminal, il est bête, il ne sait que afficher des caractères, et on ne va pas dire ça a Python non plus : ça serait “trop tard” s’il est déjà lancé ce n’est peut-être pas celui du venv que tu voulais. Le seul moyen c’est de dire ça à ton shell (bash) via : source .venv/bin/activate.

Là le shell réagit un peu et rajoute (.venv) au prompt.

À partir d’ici tu peux travailler, installer, tout casser, réessayer, etc… si tout est cassé tu supprime le dossier .venv, recréer un venv, et hop tu as un système propre et fonctionnel pour travailler.

Au total ça ressemble à :

$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install opencv-python

Ne crée pas de fichier dans le dossier .venv/, c’est pour pip, pas pour ton code, n’oublies pas que tu peux être amené a le supprimer, donc ton code doit être dans un fichier à côté du .venv/ mais pas dedans.

Je me disais tout à coup si tu es plus à l’aise avec C++ pourquoi ne pas l’utiliser. openCV est une lib C++ à la base.