Peperonni and Lexpage, mushroom, olive, chives !    —  Skwidje

Discussions

Python : apprentissage, ide, etc

yaug 1471 Spammeur
Hello,

Pour mon nouveau taff je dois me mettre à python.
J'avais déjà un peu fait quelques scripts genre un photobooth, mais là il faut que je m'y mette plus sérieusement.
Du coup, j'ai plusieurs questions :

Ressources
Où apprendre, que dois je lire pour vite rentrer dans le sujet ?
Des tutos intéressants ?

IDE
Quel ide conseillez vous pour linux ?
Quel ide pour windows ? J'ai vu que les stagiaires actuels de la boite utilisaient Visual Studio. Un retour dessus ?
Guybrush 8427 Bob
Coté lecture :

- Dive into Python est une bonne référence pour débuter, notamment pour ceux qui n'ont pas "vraiment" fait de programmation avant, mais ça reste sympa même si on a déjà des connaissances de programmation. www.diveintopython3.net/
- A Byte of Python est une excellente référence qui couvre toutes les bases de Python (en gros, c'est une version améliorée et enrobée du "language reference" de la documentation officielle). python.swaroopch.com/

Il y aussi une tonne d'autres livres/tutos, mais ça dépend de ton use case/niveau d'expertise. Ca dépend aussi si tu veux viser une approche plutôt fonctionnelle ou objet, ou même mélanger les deux (ce que je fais en général).

La librairie standard est très complète, ça vaut la peine d'aller jeter un oeil juste pour savoir ce que les modules "offrent" de façon générale (docs.python.org/3/librar…). En particulier, y a des modules pas très "connus" qui sont pourtant très utiles, tels que functools (fonction partielle), itertools (itérateurs avancés) et collections (quelques collections supplémentaires). Ces 3 modules (surtout les 2 derniers) sont très puissants et très utiles dès qu'on commence à les manipuler.

Bien entendu, il y a pléthore de librairies qui sont distribuées sur PyPi (et installables via pip notamment), mais c'est du "cas par cas". Quoiqu'il en soit, ça vaut la peine de bien comprendre pip et les environnements virtuels. Du coté de ces derniers, je déconseille Anaconda/conda qui "cache" et "mâche" trop de choses, et je suggère d'utiliser "pew" (pip install pew ; cf github.com/berdario/pew) qui est très léger, pas du tout envahissant, et bien meilleur au quotidien que de nombreuses alternatives).

Coté IDE

On a à peu près tout et n'importe quoi de ce coté. Il n'y a pas un mois qui passe sans qu'un nouvel IDE léger n'appariasse pour Python.
- pour du scripting basique, je propose de rester avec ton éditeur préféré, peu importe le langage.
- pour des documents semi-explicatifs/analyses pas à pas, il y a "jupyter" qui est un environnement à la RStudio via une interface web. C'est très très mur (lancer "jupyter lab" au lieu de "jupyter notebook"), ça s'installe facilement (pip install jupyter), ça supporte d'autres langages (il suffit d'installer un kernel en plus) et c'est très pratique (et en plus, github affiche le contenu des notebooks directement dans son UI !).
- pour du développement plus avancé, ou on souhaite typiquement avoir une intégration avec d'autres outils, il y a SublimeText, Atom ou encore VSCode qui sont très bons tous les 3. Ayant switché du premier au deuxième, puis du second au dernier, je préfère largement VSCode qui est plus rapide, mieux pensé et dont le support Python se résume à une seule extension (et pas 5 ou 6 comme avec Atom) qui combine à peu près tout. En gros, VSCode, on l'installe et on en profite directement. Le support pour d'autres langages est excellent également (notamment pour des trucs plus "exotiques" comme Latex), ce qui fait que je ne quitte plus cet éditeur :-D
- pour du 100% Python ou presque, et si on veut sortir l'artillerie lourde, il y a PyCharm. C'est un énorme éditeur avec plein de trucs intégrés. C'est puissant, efficace, fonctionnel, mais un peu "too much". VSCode propose à peu près les mêmes fonctionnalités, mais sans t'envahir de boutons/menus & co, ce qui fait que j'ai aussi switché de PyCharm à VSCode pour mes plus "gros" projets, sans perdre en fonctionnalités, mais en gagnant en ergonomie/convivialité. Y a que Lexpage qui est encore dev sous PyCharm à cause d'un souci d'intégration de Django/Selenium dans VSCode (mais ça fait 3 ou 4 mois que ça a normalement été corrigé dans VSCode, j'ai pas ré-essayé depuis).

Pour quelques infos supplémentaires sur VSCode, je te propose de lire www.lexpage.net/board/th… (j'aurai du le tenir à jour d'ailleurs :-D).
Tchou 3587 Bob
Tu fais un lien vers des ressources Python3. Où en est-on ? Est-ce que c'est toujours "le futur" et le présent avec du 2.7 ou 2.8, ou est-ce que désormais tout se fait en python3, le reste n'étant que des projets legacy ?

Et d'ailleurs, un programme simple en 2.7 se lance t'il sans soucis en 3 ?

Je dois avouer pour le moment n'avoir fait que du 2.7 / 2.8 pour mes scripts python, mais ils commencent à dater pas mal, j'ai pas refoutu mes pattes dedans depuis un bail !


Ce message a été modifié 1 fois. Dernière modification : 30 août 2018 à 18:03 par Tchou.

Guybrush 8427 Bob
La dernière de la branche 2.x est la 2.7 (il n'y aura jamais de 2.8, cf. PEP 404 www.python.org/dev/peps/…).

Python 3 est devenu le "Python par défaut" depuis 2 à 3 ans environ. La transition n'a pas été très rapide, faut bien l'avouer, puisque ça s'est étalé sur plus de 10 ans, mais elle est faite. Quand Python 3.3 est sorti, ça a été considéré comme étant la version "stable" de Python 3, et les gens ont commencé à l'adopter. Pas mal de librairies ont soit sorti une version pour Python 3 (grâce à 2to3 qui pré-mâche une partie du travail), ou compatible avec les 2 branches (grâce au module six qui "lisse" les différences).

Il a fallu un peu de temps pour que les dernières grosses librairies migrent vers Python 3, certaines librairies comme numpy/scipy n'ont migré qu'en 2010-2011. Une fois que les "mastodontes" ont franchi le pas, tout le monde a suivi et je ne connais pas de nouveau projet "raisonnable" ne ciblant pas Python 3 par défaut ces dernières années. On est même déjà dans la phase suivante : avec l'abandon de Python 2.x en 2020, la plupart des librairies lâchent le support pour la branche 2.x.

Pour ma part, je ciblais encore Python 3.4 minimum l'an passé, et je suis passé à Python 3.5 minimum cet année pour certaines de mes libs (en fait, je suis simplement le cycle de vie des versions tels que proposés officiellement). Ca veut pas dire que ça marche pas avec des plus anciennes, ça veut juste dire que je ne vais pas tester spécifiquement (et Travis le fera pour moi de toute façon :-D). A coté de ça, j'ai encore une lib qui tourne aussi bien en 2.7 qu'en 3.3+, juste parce qu'elle est assez simple pour que ça me "coûte" rien, et parce que je peux me passer des nouvelles features.


Coté différences entre 2.7 et 3.x, c'est difficile à résumer, pas qu'y en a beaucoup, mais le langage a encore évolué depuis la 3.0 :-) Disons que la plupart des codes en 2.7 tourneront sans souci en 3.x après un passage dans l'outil 2to3 qui fait une conversion automatique. Cette conversion, c'est essentiellement "print" qui passe d'un keyword à une fonction, les map/filter qui retournent des itérateurs et pas des listes/tuples, les str en unicode par défaut, la division réelle par défaut, etc. Ce sont pas des gros changements, et si tu as du code qui n'est pas trop envahissant (moins de 1000 lignes), ça va vite à changer (soit avec 2to3, soit à la main).

Depuis la 3.0, y a eu pleeeeein d'autres changements mais qui sont tous compatibles (donc ton "vieux code" marchera toujours sur le nouveau), au moins jusqu'à l'hypothétique Python 4 ;-)
yaug 1471 Spammeur
Merci pour tous ces retours.
J'ai commencé (très) doucement la lecture de python.swaroopch.com/

Commençant aujourd'hui (oui c'est aussi la rentrée pour moi), j'ai déjà mes premiers problèmes. Il faut dire que je suis sous windows :frightened:
Je bosse sous visual studio et je veux lancer des commandes dans le terminal VS que m'ont laissé les stagiaires.

J'ai un problème de chargement de modules.

Je lance la commande suivante :
python ept.py
et je reçois l'erreur suivante :
Traceback (most recent call last):
File "ept.py", line 1, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'
En gros je pense que le terminal ne sait pas où se situent les modules, car quand je contrôle clique sur import pandas il (VS) me fait bien arriver sur le module, donc lui semble capable de lier pandas à la lib.

Une idée ?
Des gens condamnés à bosser en python sur windows ? :D


Ce message a été modifié 2 fois. Dernière modification : 3 septembre 2018 à 16:45 par yaug.

Guybrush 8427 Bob
Il y a plusieurs sources potentielles à ce problème. Essentiellement, l'interpréteur que tu utilises lorsque tu tapes la commande "python ept.py" n'est pas le même que celui utilisé par VSCode.

Les deux premières possibilités :
- La première est que VSCode est configuré pour utiliser un autre interpréteur, par exemple "python3" au lieu de "python". Essaie de taper "python3 ept.py" pour voir si ça solutionne le problème.
- La seconde est qu'un environnement virtuel est configuré. C'est à peu près la même chose que ci-dessus, à part qu'au lieu d'utiliser un nom d'exécutable, il va falloir trouver et utiliser le chemin vers le binaire de l'environnement virtuel. Si c'est une autre personne qui a configuré ton VS, il faut regarder dans le workspace settings (ou le user settings à défaut) pour voir si un "pythonPath" est configuré. Si oui, c'est le path que tu dois utiliser pour exécuter ton script.

En gros, chaque "binaire Python" a potentiellement son propre set de librairies installées (installées via "pip" associé à ce binaire, ou encore via "path_to_python -m pip" quand on est prudent ;-)). Le hic, c'est que souvent, le "python" par défaut qu'on obtient quand on le tape dans un terminal, c'est une version 2.7 (pour des raisons de compatibilité, surtout sous Linux), alors qu'on travaille pratiquement toujours avec "python3" (voire directement avec une version plus précise ou un binaire plus "spécifique").
yaug 1471 Spammeur
C'est un peu ce que je pense ouais.
Ils ont installé mon pc comme des bourrins en renommant l'ancien user mais évidemment on a eut des soucis, du coup je pense aussi c'est un pb de user et de config VS Code.
A terme je vais bosser sous linux pour la partie code, mais je n'ai pas encore mon laptop pour cela, du coup je dois trouver un moyen de faire fonctionner le bouzin pour le moment :D

python -V me donne :
Python 3.6.6

Le shell utilisé est powershell.

Autre test :
pip install pandas
Requirement already satisfied: pandas in c:\anaconda3\lib\site-packages (0.23.0)
Requirement already satisfied: numpy>=1.9.0 in c:\anaconda3\lib\site-packages (from pandas) (1.14.3)
Requirement already satisfied: pytz>=2011k in c:\anaconda3\lib\site-packages (from pandas) (2018.4)
Requirement already satisfied: python-dateutil>=2.5.0 in c:\anaconda3\lib\site-packages (from pandas) (2.7.3)
Requirement already satisfied: six>=1.5 in c:\anaconda3\lib\site-packages (from python-dateutil>=2.5.0->pandas) (1.11.0)


Ce message a été modifié 1 fois. Dernière modification : 3 septembre 2018 à 17:15 par yaug.

Guybrush 8427 Bob
Ok, donc visiblement ton système utilise Anaconda pour la gestion des environnements (cf. le path d'installation des librairies). Cf. mon "je déconseille anaconda" de mon premier post :-D

Donc grosso-modo, Anaconda s'occupe dans ton cas de la gestion des binaires Python et des librairies installées. Si tu veux utiliser une librairie installée par Anaconda, il va falloir utiliser le binaire installé par Anaconda. A priori, si tu installes un truc avec "pip" et que tu exécutes avec "python", alors ça doit toucher le même environnement (mais ça va dépendre de quel environnement est actuellement actif dans ton shell). Dans le cas présent, ce serait bien de vérifier quel binaire est utilisé (pour "python" et pour "pip" également, puisque visiblement "pip" est dans l'environnement, mais pas "python"). Y a pas un équivalent de "which" sous Windows à tout hasard ?

[Edit : je précise que ce n'est pas forcément un "gros souci", mais Anaconda a le chic de rendre complexe des cas simples, tout en rendant simples des cas complexes. Le problème, c'est qu'il est difficile de "descendre" dans Anaconda, c'est pour ça que je préfère gérer les environnements "à la main" ou à l'aide d'un outil léger comme "pew". Le gros souci avec Anaconda, c'est qu'il est difficile de le faire cohabiter avec d'autres approches, d'où la m... quand on l'installe et qu'on veut s'en passer :-D]


Ce message a été modifié 1 fois. Dernière modification : 3 septembre 2018 à 17:49 par Guybrush.

yaug 1471 Spammeur
Nope, pas d'équivalent de which que je connaisse.
Bon ça sent la galère tout ça :D
Limite j'ai envie de tout désinstaller et repartir sur du neuf pour ne pas avoir d'emmerdes ...$

EDIT:
Bon je désinstalle VS, anaconda et python et je redémarre sur des installations propres et faite par moi. On va voir si cela fonctionne.


Ce message a été modifié 1 fois. Dernière modification : 4 septembre 2018 à 09:13 par yaug.

Tchou 3587 Bob
Vu qu'il y a (?) un sous-système bash et terminal désormais sous W10, y'a pas moyen d'avoir les "bonnes" commandes voire un ecosystème python particulier sans avoir à tout réinstaller ?

Répondre

Vous devez être inscrit et identifié.