Forum Linux.debian/ubuntu Autre version de python3 dans un virtualenv

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
4
déc.
2025

Bonjour à tous,

J'essaie de lancer un projet avec une version antérieur de python sous debian trixie.

Je voulais créer un virtualenv comme on me l'a conseillé mais je n'arrive pas à changer de version de python3.

En faisant ceci.

    python3 -m venv venv
    source venv/bin/activate

    (venv) user@rpi:~/coral/pycoral $ virtualenv -p python3.9 venv
    RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.9'
    (venv) user@rpi:~/coral/pycoral $ pip install python==3.9
    ERROR: Could not find a version that satisfies the requirement python==3.9 (from versions: none)
    ERROR: No matching distribution found for python==3.9
    WARNING: There was an error checking the latest version of pip.

Quel est la méthode que vous utilisez pour changer la version courante de python dans un venv ?

Merci pour vos retours.

  • # version python

    Posté par  . Évalué à 4 (+3/-0).

    Pour Ubuntu, je ne connais pas vraiment, mais il y' a apparemment un ppa qui permet de gerer ca simplement.

    Pour Debian, a ma connaissance tu peux utiliser pyenv notamment, ou pour suivre la mode rust uv (au revoir l'enfer des dependances python, bonjour l'enfer des dependances rust :p)

    ++
    Gi)

    • [^] # Re: version python

      Posté par  . Évalué à 2 (+1/-0). Dernière modification le 04 décembre 2025 à 20:54.

      Une alternative que j'ai récemment découverte: passer par mise-en-place, combinée avec uv.

      J'installe d'abord mise, puis uv via mise de manière globale:

      $ mise use -g uv

      Et enfin, pour le projet Python pour lequel je veux la version 3.9:

      $ mkdir myproject
      $ cd myproject
      $ mise use python@3.9
      # optionnel s'il existe déjà un pyproject.toml
      $ uv init  
      $ uv venv

      Le virtualenv se trouve alors dans myproject/.venv, et ses binaires sont appelables de différentes manières, notamment:

      # Depuis myproject/
      $ mise exec -- python3 ...
      $ uv run ...
      $ ./.venv/bin/mybinary ...

      PS: Les styles sont cassés, je ne comprends pas pourquoi—il est trop tard sans doute ;-/

      • [^] # Re: version python

        Posté par  (site web personnel) . Évalué à 4 (+1/-0).

        PS: Les styles sont cassés, je ne comprends pas pourquoi—il est trop tard sans doute ;-/

        Les triple quotes nécessitent une ligne blanche avant.

        • [^] # Re: version python

          Posté par  . Évalué à 1 (+0/-0).

          Merci Benoît!

        • [^] # Re: version python

          Posté par  . Évalué à 4 (+1/-0). Dernière modification le 05 décembre 2025 à 13:51.

          Les triple quotes nécessitent une ligne blanche avant.

          et encore mieux le langage juste apres

          dans ton cas

          ```python
          import talibpython

          puis toncode python
          avec les indentations
          if
          necessaire

          lasuite du code
          ```

          devient alors

          import talibpython
          
          puis toncode python
            avec les indentations
            if
              necessaire
          
          lasuite du code
  • # chemin complet

    Posté par  (site web personnel) . Évalué à 3 (+1/-0).

    plutôt que de mettre python3.9 mets le chemin complet

    c'est ce qui est indiqué sur https://fr.python-3.com/?p=5705

  • # Compiler

    Posté par  . Évalué à 5 (+4/-0). Dernière modification le 04 décembre 2025 à 19:01.

    Si le paquet python3.9 n'est pas dispo dans le gestionnaire de paquet, tu peux compiler python3, l'installer par exemple dans /opt/python3.9.

    Tu trouveras ce qu'il faut

    Ensuite tu crées ton venv avec

    $ /opt/python3.9/python -m venv venv

    ou quelque chose de ce genre. Dans le venv le binaire python sera bien python 3.9.

  • # pyenv

    Posté par  (site web personnel) . Évalué à 8 (+6/-0). Dernière modification le 04 décembre 2025 à 21:48.

    La magie est pyenv : ça compile la version que tu veux de python et la garde dans ~/.pyenv/versions/3.xx. Ensuite les venv font des liens de l’exécutable python3 vers celui qu'on veut.

    Je tape de mémoire; il y a peut-être un ou deux chemins à adapter.
    À faire dans la home:

    sudo apt install  build-essential zlib1g-dev libffi-dev libssl-dev libreadline-dev libsqlite3-dev liblzma-dev libbz2-dev
    
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    ~/.pyenv/bin/pyenv install -v 3.10.6
    

    À partir de là tu as un python 3.10.6 dans ~/.pyenv/version/3.10.6.

    Ensuite dans ton projet :

    cd /chemin/vers/mon/projet
    ~/.pyenv/versions/3.10.6/bin/python3 -m pip venv venv
    

    Maintenant le fichier /chemin/vers/mon/projet/venv/bin/python3 est un lien vers le python 3.10.6 fraîchement compilé.

    Et enfin tu installes :

    cd /chemin/vers/mon/projet/venv/bin/python3
    ./python3 -m pip install --upgrade pip
    ./pip3 install -r /chemin/vers/mon/projet/requirements.txt

    Maintenant ton script contient :

    #!venv/bin/python3
    
    import ...
    

    et les imports se feront à partir de venv/lib/python3.13/site-packages.

    CONSEIL: ne source pas le venv. Utilise un shebang dans le script. Moins de suprises en cas d'oubli.

    CONSEIL : je jamais. JAMAIS faire de pip install dans le python du système. Sinon tu passes du python c'est bien à l'enfer.

    • [^] # Re: pyenv

      Posté par  . Évalué à 7 (+4/-0).

      CONSEIL : je jamais. JAMAIS faire de pip install dans le python du système. Sinon tu passes du python c'est bien à l'enfer.

      Purée, si au moins les gens faisant la doc de leur projets faisaient comme tu l'indique… Toutes les docs que j'ai lu ne se donnent pas cette peine…

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Un outil méconnu: pixi

    Posté par  . Évalué à 3 (+2/-0). Dernière modification le 07 décembre 2025 à 21:24.

    Il y a un outil méconnu mais très pratique qui peut faire ça, c’est pixi. Pour ceux qui connaissent Conda, c’est une réimplémentation en Rust, très rapide et compatible avec les forges Conda, comme conda-forge.

    Voilà un exemple:

    pyproject.toml:

    [project]
    name = "my_project"
    requires-python = "==3.9"
    dependencies = [
        "numpy",
        "pandas",
        "matplotlib",
        "ruff",
    ]

    main.py:

    import sys
    
    print(sys.version)
    
    import numpy
    
    print(numpy.version.version)

    Execution:

    $ pixi run start
    
    ✨ Pixi task (start): python main.py                                                                                                                                                                                                                                                      
    
    3.9.0 | packaged by conda-forge | (default, Nov 26 2020, 07:57:39) 
    [GCC 9.3.0]
    
    2.0.2

    pixi va téléchargement automatiquement toutes les dépendances et les mettre à disposition du projet, sans toucher le système, comme un venv.
    Là j’utilise une task, mais il est aussi possible d’utiliser l’environnement interactivement (pixi shell), comme pour un venv là aussi…

    Ici, c’est un projet Python (pyproject).toml, mais pixi permet aussi de créer des projets génériques (pixi.toml). Ça peut être une alternative plus simple et légère à Docker.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.