webentwicklung-frage-antwort-db.com.de

So starten Sie Python Idle aus einer virtuellen Umgebung (Virtualenv)

Ich habe ein Paket, das ich aus einer virtuellen Umgebung installiert habe. Wenn ich nur den Python-Interpreter starte, kann das Paket problemlos importiert werden. Wenn ich jedoch Idle starte, kann das Paket nicht importiert werden (da es nur in einer bestimmten virtuellen und nicht in einer globalen Umgebung verfügbar ist). Wie kann ich Idle von einer Virtualenv aus starten, damit alle Pakete von der Virtualenv verfügbar wären? 

37

IDLE ist im Wesentlichen 

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

Sie können es also selbst starten, sofern Sie die virtualenv nicht ohne Standardpakete erstellt haben.

34
9000

Kurze Antwort

  1. Starten Sie die virtuelle Umgebung
  2. python -m idlelib.idle ausführen

Von diese Antwort .

Lange Antwort

Diese Antwort setzt Python 3 voraus.

Es gibt verschiedene Manager für virtuelle Umgebungen, von denen jeder eine etwas andere Art der Handhabung hat, wo Python installiert ist und wie es ausgeführt wird. wie in dieser Antwort beschrieben .

Diese Antwort setzt voraus, dass das Modul venv verwendet wird und dass es gemäß den docs installiert wurde.

Hinweis: Einige Linux-Distributionen packen das venv-Modul in ein separates Paket: Ubuntu und Debian

Wenn die virtuelle Umgebung in einem Projektordner mit dem Namen my_project_dir installiert wurde, indem python -m venv my_project-venv in diesem Ordner ausgeführt wurde, befindet sich die virtuelle Umgebung in einem neuen Ordner, der vom Modul erstellt wurde:

my_project_dir
      │
      ┝━ my_project-venv

Unter Windows werden mit Python 3.7.1 die Dateien im Ordner my_project-venv wahrscheinlich wie folgt aussehen:

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

Die virtuelle Umgebung kann durch Ausführen des Skripts activate.bat oder Activate.ps1 gestartet werden, abhängig davon, ob cmd oder PowerShell verwendet wird :

:: 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

Hinweis: Diese Skripts lassen die Shell nicht geöffnet, wenn sie durch Doppelklicken ausgeführt werden. Starten Sie eine Shell und führen Sie sie aus, indem Sie die obigen Befehle eingeben. Die Ordnernamen wurden für Ihr Projekt geändert.

Bei den meisten anderen Betriebssystemen sieht der Ordner der virtuellen Umgebung folgendermaßen aus:

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

Aktivieren Sie die Umgebung dann von einer anderen Shell als csh oder fish aus:

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

Für csh und fish gibt es Shell-spezifische Skripts zur Aktivierung der virtuellen Umgebung (activate.csh bzw. activate.fish), die wie das activate-Skript ausgeführt werden können.

Nachdem die virtuelle Umgebung auf allen Betriebssystemen aktiviert wurde, startet IDLE mit dem Zugriff auf die in der virtuellen Umgebung installierten Pakete:

python -m venv idlelib.idle
41

Unter Windows kann ein Python-Skript, das von der Befehlszeile aus ausgeführt wird, some_script.py von einem anderen Python-Interpreter als dem ausgeführt werden, der mit dem Befehl python some_script.py verwendet wird (es hängt von der py-Dateizuordnung ab). Wenn Sie dieses Problem vermeiden möchten, erstellen Sie am besten eine Batchdatei idle.bat mit dem Inhalt python -c "from idlelib.PyShell import main; main()" und legen Sie sie im Scripts-Ordner in der virtuellen Umgebung ab. Wie alle anderen, die im Leerlauf sind, müssen auch die tcl- und tk-Ordner verwendet werden. Die einfachste Lösung besteht darin, symbolische Links von virtualenv zur base Python-Installation auf diese Weise zu erstellen

(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

Ein paar Antworten zusammenstellen und so mache ich dies unter Windows mit einer voll funktionsfähigen Batchdatei.

Erstellen Sie idle.bat im Scripts-Verzeichnis Ihrer virtualenv. Es erstellt (sofern nicht vorhanden) sowohl Links zu Tcl als auch zu Tk (Version 8.5 zum Zeitpunkt des Schreibens) und legt sie in das Lib-Verzeichnis von virtualenv. Anschließend wird es inaktiv. Kopieren Sie diesen Code genau in einen Editor. Ändern Sie die Pfadnamen für Ihre aktuelle Installation von virtualenv und Python (meine Standardeinstellung für 2.7) und speichern Sie sie in 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()"

Führen Sie das Skript mit Powershell (RUN AS ADMIN!) Aus, um den Leerlauf zu öffnen.

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

@biomed Ich bin unter Windows und habe es versucht. In meinem python2.6-Ordner musste ich die Ordner python26/tcl/tcl8.5 und python/tcl/tk8.5 nach python26/lib kopieren und dann das Skript oben im Skriptordner meines virtualenv erstellen. Hat super gearbeitet.

2
Tim

Python 3.6 modernisiert und refactoredidlelib. Diese Änderung beinhaltete die Umbenennung mehrerer Methoden. Aus diesem Grund muss jetzt mit idlelib.PyShell auf idlelib.pyshell zugegriffen werden. Das folgende Snippet basiert auf der akzeptierten Antwort und sollte für jede Python-Version funktionieren:

#!/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

Bei mir läuft so etwas einfach (Linux-Terminal):

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

(venv ist offensichtlich der Weg zu Ihrem venv)

1
yan

Ich verwende das Betriebssystem Ubuntu 15.04 . Ich habe einige Pakete mit virtualenv installiert.

Um die Dateien in virtualenv mit diesen Paketen auszuführen, verwende ich die folgenden Befehle im Terminal

(Name meiner virtuellen Umgebung ist venv ):

#Activate the virtualenv venv
source venv/bin/activate

#To Run IDLE in virtualenv venv
python -m idlelib

Nach dem Ausführen vonIDLEkönnen Sie die Datei mit der Tastenkombination ctrl + o öffnen.

1
arsho