web-dev-qa-db-fra.com

Comment lancer python Idle depuis un environnement virtuel (virtualenv)

J'ai un paquet que j'ai installé à partir d'un environnement virtuel. Si je lance simplement l'interpréteur python, ce paquet peut être importé sans problème. Toutefois, si je lance Idle, ce package ne peut pas être importé (car il n’est disponible que dans un fichier virtualenv particulier et non dans le monde). Comment puis-je lancer Idle à partir d'un virtualenv, afin que tous les packages de virtualenv soient disponibles? 

37
Kevin Le - Khnle

IDLE est essentiellement 

from idlelib.PyShell import main
if __== '__main__':
  main()

Vous pouvez donc le lancer vous-même, sauf si vous avez créé virtualenv sans packages par défaut.

34
9000

Réponse courte

  1. Démarrer l'environnement virtuel
  2. Exécuter python -m idlelib.idle

De cette réponse .

Longue réponse

Cette réponse suppose Python 3.

Il existe quelques gestionnaires d’environnements virtuels différents, chacun ayant une manière légèrement différente de gérer l’emplacement de python et son mode d’exécution, comme indiqué dans cette réponse .

Cette réponse suppose que le module venv est utilisé et qu'il a été installé à la suite de la documentation .

Remarque: certaines distributions Linux regroupent le module venv dans un package séparé: Ubuntu et Debian

Si l'environnement virtuel a été installé dans un dossier de projet appelé my_project_dir en exécutant python -m venv my_project-venv à partir de ce dossier, l'environnement virtuel se trouvera dans un nouveau dossier créé par le module:

my_project_dir
      │
      ┝━ my_project-venv

Sous Windows, avec Python 3.7.1, les fichiers du dossier my_project-venv ressembleront probablement à ceci:

my_project-venv
      │
      ┝━ Include
      ┝━ Lib
      ┝━ Scripts
      │     ┝━ ...
      │     ┝━ activate.bat
      │     ┝━ Activate.ps1
      │     ┝━ deactivate.bat
      │     ┕━ ...
      │
      ┕━ pyvenv.cfg

L'environnement virtuel peut être démarré en exécutant le script activate.bat ou Activate.ps1, selon que/ cmd ou PowerShell est utilisé :

:: Using cmd.exe
cd my_project_dir
.\my_project-venv\Scripts\activate.bat

# Using PowerShell
cd my_project_dir
.\my_project-venv\Scripts\Activate.ps1

Note: Ces scripts ne gardent pas le Shell ouvert s'ils sont exécutés en double-cliquant dessus. Lancez un shell, puis exécutez-les en tapant les commandes ci-dessus, avec les noms de dossier modifiés pour votre projet

Sur la plupart des autres systèmes d'exploitation, le dossier de l'environnement virtuel ressemblera à ceci:

my_project-venv
      │
      ┝━ bin
      │     ┝━ ...
      │     ┝━ activate
      │     ┝━ activate.csh
      │     ┝━ activate.fish
      │     ┕━ ...
      │
      ┝━ include
      ┝━ lib
      ┝━ lib64
      ┕━ pyvenv.cfg

Ensuite, à partir de toute coquille autre que csh ou poisson , activez l'environnement en:

# Most operating systems
cd my_project_dir
. my_project-venv/bin/activate

Pour csh et fish, il existe des scripts spécifiques à Shell permettant d'activer l'environnement virtuel (activate.csh et activate.fish, respectivement) et ils peuvent être exécutés comme le script activate.

Une fois que l’environnement virtuel a été activé sur tous les systèmes d’exploitation, les opérations suivantes démarreront IDLE avec l’accès aux packages installés dans cet environnement:

python -m venv idlelib.idle
41

Sous Windows, un script Python exécuté à partir de la ligne de commande comme celui-ci some_script.py peut être exécuté par un autre interpréteur Python que celui utilisé lors de l'utilisation de la commande python some_script.py (dépend de l'association de fichiers py). Si vous voulez éviter ce problème, il est préférable de créer un fichier de commandes idle.bat avec le contenu python -c "from idlelib.PyShell import main; main()" et de le placer dans le dossier Scripts du virtualenv. En outre, comme d’autres utilisateurs, inactif a besoin des dossiers tcl et tk pour fonctionner. La solution la plus simple consiste à créer des liens symboliques de virtualenv à l’installation base Python, comme ceci.

(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tcl8.5 "c:\Program Files\Python\2.7\tcl\tcl8.5"
symbolic link created for tcl8.5 <<===>> c:\Program Files\Python\2.7\tcl\tcl8.5
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tk8.5 "c:\Program Files\Python\2.7\tcl\tk8.5"
symbolic link created for tk8.5 <<===>> c:\Program Files\Python\2.7\tcl\tk8.5
9
Piotr Dobrogost

Rassembler quelques réponses et voici comment je fais cela sous Windows avec un fichier de commandes entièrement fonctionnel.

Faites idle.bat dans le répertoire Scripts de votre virtualenv. Il créera (sauf s'ils existent) les deux liens vers tcl et tk (version 8.5 au moment de l'écriture) et les mettra dans le répertoire Lib de virtualenv, puis se déclenchera inactif. Copiez et collez ce code exactement dans un éditeur. Modifiez les noms de chemin de votre installation actuelle de virtualenv et Python (le mien est la norme pour la version 2.7), puis enregistrez-la dans Scripts/idle.bat.

IF EXIST C:\<path to current virtualenv>\Lib\tcl8.5 (
REM do nothing
) ELSE (
    mklink /d C:\<path to current virtualenv>\Lib\tcl8.5 "c:\Python27\tcl\tcl8.5"
)
IF EXIST C:\<path to current virtualenv>\Lib\tk8.5 (
REM do nothing
) ELSE (
    mklink /d C:\<path to current virtualenv>\Lib\tk8.5 "c:\Python27\tcl\tk8.5"
)

python -c "from idlelib.PyShell import main; main()"

Exécutez le script avec Powershell (RUN AS ADMIN!) Pour ouvrir inactif.

cd c:\<path to current virtualenv>\
./Scripts/idle.bat
3
srock

@ Biomed Je suis sur Windows et j'essayais cela. Dans mon dossier python2.6, je devais copier les dossiers python26/tcl/tcl8.5 et python/tcl/tk8.5 dans python26/Lib, puis créer le script ci-dessus dans le dossier de scripts de virtualenv. A bien fonctionné.

2
Tim

Python 3.6 modernisé et remaniéidlelib. Cette modification incluait le changement de nom de plusieurs méthodes. Pour cette raison, idlelib.PyShell doit maintenant être accessible avec idlelib.pyshell. L'extrait suivant est basé sur la réponse acceptée et devrait fonctionner pour toute version de Python:

#!/usr/bin/env python
"""Simple script to run Idle from a venv in PyCharm."""

try:
    # Import for Python pre 3.6
    from idlelib.PyShell import main
except ModuleNotFoundError:
    # Import for Python version 3.6 and later
    from idlelib.pyshell import main

if __== '__main__':
    main()
2
Paul Wicking

Pour moi, lancer quelque chose comme ça marche (terminal Linux):

source venv/bin/activate && python `which idle` &

(venv est le chemin de votre venv évidemment)

1
yan

J'utilise Ubuntu 15.04 système d'exploitation. J'ai installé des paquets en utilisant virtualenv .

Donc, pour exécuter les fichiers dans virtualenv y compris ces paquets, j'utilise les commandes suivantes dans terminal

(Le nom de mon environnement virtuel est venv ):

#Activate the virtualenv venv
source venv/bin/activate

#To Run IDLE in virtualenv venv
python -m idlelib

Après avoir exécuté leINACTIF, vous pouvez ouvrir le fichier en utilisant le raccourci clavier ctrl + o .

1
arsho