Python doit être installé

python --version
python3 --version
# vérifier si les paquets sont installés
pip list
pip3 show pymysql
pip3 show flask

# installer les paquets dans votre $HOME

pip install flask --break-system-packages
pip install pymysql --break-system-packages

# les paquets sont installés sur à l'IUT /usr/local/lib/python3.11/dist-packages
# les paquets sont installés sur ~/.local/lib/pythonxxxxx sur vos machines linux
sudo apt install python3-pip
python --version
sudo ln -s /usr/bin/python3 /usr/bin/python

Utilisation de pycharm


🤖 Script pour créer des lanceurs sur les machines de l’IUT

recopier le script ci-dessous dans un terminal


#!/bin/bash


echo ""  >> ~/.bashrc
echo "alias looping='wine /opt/looping-mcd/Looping.exe'" >> ~/.bashrc
echo "alias datagrip='/opt/datagrip/bin/datagrip.sh'" >> ~/.bashrc
echo "alias pycharm='/opt/pycharm/bin/pycharm.sh'" >> ~/.bashrc 


echo "#!/usr/bin/env xdg-open" > "/home/$USER/Bureau/datagrip.desktop"
echo "[Desktop Entry]" >> "/home/$USER/Bureau/datagrip.desktop"
echo "Version=1.0" >> /home/$USER/Bureau/datagrip.desktop
echo "Type=Application" >> /home/$USER/Bureau/datagrip.desktop
echo "Terminal=false" >> /home/$USER/Bureau/datagrip.desktop
echo "Icon=/opt/DataGrip/bin/datagrip.png" >> /home/$USER/Bureau/datagrip.desktop
echo "Exec=/opt/DataGrip/bin/datagrip.sh" >> /home/$USER/Bureau/datagrip.desktop
echo "Name=datagrip" >> /home/$USER/Bureau/datagrip.desktop


echo "#!/usr/bin/env xdg-open" > "/home/$USER/Bureau/pycharm.desktop"
echo "[Desktop Entry]" >> "/home/$USER/Bureau/pycharm.desktop"
echo "Version=1.0" >> /home/$USER/Bureau/pycharm.desktop
echo "Type=Application" >> /home/$USER/Bureau/pycharm.desktop
echo "Terminal=false" >> /home/$USER/Bureau/pycharm.desktop
echo "Icon=/opt/pycharm/bin/pycharm.png" >> /home/$USER/Bureau/pycharm.desktop
echo "Exec=/opt/pycharm/bin/pycharm.sh" >> /home/$USER/Bureau/pycharm.desktop
echo "Name=pycharm" >> /home/$USER/Bureau/pycharm.desktop


echo "#!/usr/bin/env xdg-open" > "/home/$USER/Bureau/looping.desktop"
echo "[Desktop Entry]" >> "/home/$USER/Bureau/looping.desktop"
echo "Version=1.0" >> /home/$USER/Bureau/looping.desktop
echo "Type=Application" >> /home/$USER/Bureau/looping.desktop
echo "Terminal=false" >> /home/$USER/Bureau/looping.desktop
echo "Icon=/opt/looping-mcd/looping.png" >> /home/$USER/Bureau/looping.desktop
echo "Exec=wine /opt/looping-mcd/Looping.exe" >> /home/$USER/Bureau/looping.desktop
echo "Name=Looping" >> /home/$USER/Bureau/looping.desktop

Si le script ne fonctionne pas, recopiez le script dans un éditeur texte (VsCode) et remplacez partout (Ctrl H) $USER par votre login.


🤖 Ajouter un lanceur dans le panneau

utiliser pycharm (à l’IUT /opt/pycharm/bin/pycharm.sh et licence server)

créer un lanceur ou utiliser le terminal

lancement (ou installation sur vos machine personnelle)

la licence


  1. Créer un compte sur le site jetbrains avec votre email de l’IUT comme login
  2. Valider votre compte en cliquant sur le lien dans votre boite mail.
  3. Compléter un formulaire avec vos références d’étudiant.
  4. Activer l’autorisation d’utiliser des licences en cliquant sur le lien dans votre boite mail.

configuration


créer une nouvelle application flask (attention : l’explorateur de fichiers de pycharm a parfois du mal à scanner le contenu du dossier HOME monté en NFS)

projet de base sur pycharm

cette application se présente sous la forme suivante

projet de base sur pycharm



projet de base sur pycharm


python app.py

première application

from flask import Flask, request, render_template, redirect, flash, url_for, abort  
                # application WSGI

# (interface de serveur web python)
# comportements et méthodes d'un serveur web


app = Flask(__name__)    # instance de classe Flask (en paramètre le nom du module)
app.secret_key = 'une cle(token) : grain de sel(any random string)'
app.config["TEMPLATES_AUTO_RELOAD"] = True 

@app.route('/')
@app.route('/hello')
def hello_world():  # put application's code here
    return 'Hello World!<a href="hello">lien hello</a>'

if __name__ == '__main__':
    app.run(debug=True, port=5000)
python app.py

lancer le serveur web ; la boite à outils


Créer un fichier launcher.sh avec les droits d’exécution : recopier le contenu ci-dessous dans un terminal de pycharm

touch launcher.sh
chmod u+x launcher.sh
echo "flask --debug  --app app  run   --host 0.0.0.0" > launcher.sh
echo "ouvrir le fichier launcher.sh et cliquer sur bouton gauche"
lancer ce fichier pour tester l’application (utiliser le bouton dans l’éditeur)


Pour recharger automatiquement une application quand on modifie une vue (template), ajouter la ligne ci-dessous dans votre code:
app.config["TEMPLATES_AUTO_RELOAD"] = True
( documentation - documentation)

Créer un fichier de nom launcher.bat par exemple avec comme contenu :

python -m flask --debug  --app app  run   --host 0.0.0.0

problèmes possibles

adresse(port) déjà utilisée

message d’erreur : “Address already in use”

sur Linux : recherchez les numéros des processus qui utilisent le nom “flask” avec la commande ci-dessous :

ps aux | grep flask

puis avec xxxx ou xxxx est l’ID (première colonne du résultat de la commande précédente) du ou des processus flask à tuer (arrêter), faire

kill -9   xxxx



autre solution : changez le port utilisé par le serveur web

flask --debug  --app app  run   --host 0.0.0.0  --port 5002

problème d’installation (flask non reconnu)

message d’erreur : ” option –debug” non reconnue

flask --version
pip install --upgrade Flask
# vérifier si les paquets sont installés
pip list
pip3 show pymysql
pip3 show flask

# installer les paquets dans votre $HOME

pip install flask --break-system-packages
pip install pymysql --break-system-packages



# les paquets sont installés sur à l'IUT /usr/local/lib/python3.11/dist-packages
# les paquets sont installés sur ~/.local/lib/pythonxxxxx sur vos machines linux


Il est possible de déactiver l’affichage de conseils d’incrustation : “File / Settings / Editor ; Inlay Hints ; disable Code Vision”


Texte souligné en vert : Dé-activer la typo : “File / Settings /” “Inspection” ; Proofreading” ; Typo”




annexe : utiliser GitHub ou GitLab

mise en place d’un projet

Dans un terminal :

git clone https://gitlab.com/username/nom_repository.git
cd nom_repository


Tester dans un terminal votre username avec votre_clé

git config credential.helper store


# récupérer les modification des autres dans le repository
git pull

# modifiez le contenu du repository
git add --all
git commit -m "modif projet"
git push


# commande pour revenir en arrière  dans son code si on a oublier de faire un "pull" (dernière version avec un "commit")

git reset --hard HEAD^

# lister les "commits"
git log


.idea
.gitignore
__pycache__
.git
.env

Dans votre home, dans le fichier ~/.git-credentials, vous trouverez le login et la clé

boutons : “pull” “commit” “push”

Utilisation de dotenv

Documentation de dotenv

Commencer par installer le paquet :

pip install python-dotenv

Modifier un peu le début du fichier app.py

#! /usr/bin/python
# -*- coding:utf-8 -*-
from flask import Flask, request, render_template, redirect, flash

app = Flask(__name__)
app.secret_key = 'une cle(token) : grain de sel(any random string)'

from flask import session, g
import pymysql.cursors

import os                                 # à ajouter
from dotenv import load_dotenv            # à ajouter
load_dotenv()                             # à ajouter

def get_db():
    if 'db' not in g:
        g.db =  pymysql.connect(
            host=os.environ.get("HOST"),                # à modifier
            user=os.environ.get("LOGIN"),               # à modifier
            password=os.environ.get("PASSWORD"),        # à modifier
            database=os.environ.get("DATABASE"),        # à modifier
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )
    return g.db

@app.teardown_appcontext
def teardown_db(exception):
    db = g.pop('db', None)
    if db is not None:
        db.close()

Créez un fichier .env à la racine du projet (au même niveau que app.py)

HOST="localhost"
PASSWORD="secret"
LOGIN="login"
DATABASE="BDD_login"


Sur pythonanywhere, remplacer :

load_dotenv()

par 2 lignes comme celles ci-dessous (voir stackoverflow) :

project_folder = os.path.expanduser('~/sae_s2_2024')  # adjust as appropriate (avec le dossier où se trouve le fichier .env et app.py)
load_dotenv(os.path.join(project_folder, '.env'))

annexes

https://www.nicelydev.com/git



Déploiement continu