Как да стартирате python Idle от виртуална среда (virtualenv)

Имам пакет, който инсталирах от виртуална среда. Ако просто стартирам интерпретатора на Python, този пакет може да бъде импортиран добре. Въпреки това, ако стартирам Idle, този пакет не може да бъде импортиран (тъй като е наличен само в един конкретен virtualenv, а не глобален). Как мога да стартирам Idle от virtualenv, така че всички пакети от virtualenv да са налични?


person Kevin Le - Khnle    schedule 07.02.2011    source източник


Отговори (8)


За Python 3.6+, моля, вижте отговора на Paul Wicking по-долу.

В Python преди 3.6 IDLE е по същество

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

Така че можете да го стартирате сами, освен ако не сте създали virtualenv без пакети по подразбиране.

person 9000    schedule 07.02.2011
comment
От коя папка бих стартирал тези скриптове? Благодаря - person Kevin Le - Khnle; 08.02.2011
comment
@Khnle: от папката, в която се намира вашият проект, очевидно, след като сте активирали virtualenv. Току-що го пробвах и работи. Поставете този скрипт във вашия virtualenv bin. - person 9000; 08.02.2011
comment
Създадох неактивен скрипт в bin/ на моя virtualenv и използвах virtualenv python в моя shebang, но той се оплаква, че не може да намери Tkinter. Проверих и Tkinter може да се импортира в обикновения python2.7.1, но не мога да импортирам Tkinter от моя virtualenv python. Как мога да направя Tkinter достъпен за моя virtualenv python (не използвах сайт-пакети по друга причина) - person biomed; 03.05.2011
comment
@biomed: погледнете lib директорията на вашия virtualenv. намерете всеки .pth файл в него; лесно е да видите как работи. името е импортируемо име, съдържанието е път. опитайте да направите такъв трик с Tkinter. (не, не съм го пробвал с Tkinter.) - person 9000; 03.05.2011
comment
Вътре в активен virtualenv можете просто да въведете python -c "from idlelib.PyShell import main; main()" и това ви спестява да пазите някъде скрипт. - person Ronny Andersson; 17.09.2014
comment
наистина, python -m idlelib - person minopret; 20.08.2015
comment
python -m idlelib не работи за мен. Може ли някой да обясни какво трябва да се случи тук? Просто не може да намери модула idlelib. Какви са пътищата, които използвате? - person Jamie Marshall; 05.01.2019
comment
Току-що опитах това с virtualenv по подразбиране под Python 3.6 и не работи с импортиране в скрипт. python -m idlelib.idle на @MatthewWillcockson работи. - person Marcin K; 16.05.2019
comment
За Python 3.6.8 използвайте python3 -m idlelib или python3 -m idlelib.idle. - person Gathide; 13.07.2019
comment
Вижте отговора на Paul Wicking по-долу за скрипт, който ще работи както за Python преди 3.6, така и след него. Този свърши работа за мен. - person Coffee_fan; 23.09.2019

Кратък отговор

  1. Стартирайте виртуалната среда
  2. Пусни python -m idlelib.idle

От този отговор.

Дълъг отговор

Този отговор предполага Python 3.

Има няколко различни мениджъра на виртуална среда, всеки от които има малко по-различен начин за управление на това къде е инсталиран python и как се изпълнява, както е подробно описано в този отговор.

Този отговор предполага, че се използва модулът venv и че е инсталиран след документите .

Забележка: Някои дистрибуции на Linux пакетират модула venv в отделен пакет: Ubuntu и Debian

Ако виртуалната среда е инсталирана в папка, наречена my_project-venv чрез стартиране на python -m venv my_project-venv от папката my_project, виртуалната среда ще бъде в нова папка, създадена от модула:

my_project_dir
      │
      ┝━ my_project-venv

В Windows, с Python 3.7.1, файловете в папката my_project-venv вероятно ще изглеждат така:

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

Виртуалната среда може да бъде стартирана чрез изпълнение на скрипта activate.bat или Activate.ps1, в зависимост от това дали cmd или се използва PowerShell:

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

Забележка: Тези скриптове не държат обвивката отворена, ако се стартират чрез двукратно щракване върху тях. Стартирайте обвивка, след което ги стартирайте, като въведете горните команди, като имената на папките са променени за вашия проект

На повечето други операционни системи папката на виртуалната среда ще изглежда така:

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

След това, от която и да е черупка, различна от csh или риба, активирайте средата чрез:

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

За csh и fish има специфични за обвивката скриптове за активиране на виртуалната среда (activate.csh и activate.fish, съответно) и те могат да се изпълняват като скрипта activate.

След като виртуалната среда бъде активирана на всички операционни системи, изпълнението на следното ще стартира IDLE с достъп до пакетите, инсталирани във виртуалната среда:

python -m idlelib.idle
person Matthew Willcockson    schedule 29.06.2016
comment
Професионален съвет: задайте това като псевдоним, като използвате alias idle='python -m idlelib.idle' Можете също да направите това в Windows, като зададете DOSKEY: stackoverflow.com/a/21040825/ 1656488 - person Maksim; 06.09.2018

В Windows скрипт на Python, изпълняван от командния ред като този some_script.py, може да се изпълнява от друг интерпретатор на Python, различен от този, използван при използване на команда python some_script.py (зависи от асоциирането на py файлове). Ако искате да избегнете този проблем, най-добре е да създадете пакетен файл idle.bat със съдържание python -c "from idlelib.PyShell import main; main()" и да го поставите в папката Scripts във virtualenv. Също така, както други отбелязаха, неработещият режим се нуждае от tcl и tk папки, за да работи. Най-простото решение е да създадете символни връзки от virtualenv към базовата инсталация на Python като тази

(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
person Piotr Dobrogost    schedule 28.04.2012
comment
+1, благодаря ти за това. Само забележка: НЕ инсталирайте Python под Program Files заради интервала в името на пътя! Virtualenv се проваляше за мен и повторното инсталиране на Python под C:\ (по подразбиране) го поправи. - person Sabuncu; 04.05.2012
comment
Не можах да накарам файла idle.bat да работи на моята система Python 2.7, дори след като създадох връзките към символните папки. Първоначално ги създадох под Lib и стартирането на idle.bat се провали. След това създадох папка, наречена tcl във виртуалната среда, и създадох връзките към символни папки там и тя все още генерира грешка: Traceback (последно последно извикване): ... _tkinter.TclError: Не мога да намеря използваем init. tcl в следните директории: {C:\Users\AMS\my_env\tcl\tcl8.5} C:/Python27/lib/tcl8.5 C:/Users/AMS/my_env/lib/tcl8.5 ... Това вероятно означава, че Tcl не е инсталиран правилно. Някакви идеи? - person Sabuncu; 04.05.2012
comment
Добре, копирането на двете папки, както Тим посочи по-долу (вместо символни връзки), реши проблема и мога да стартирам IDLE чрез idle.bat. - person Sabuncu; 04.05.2012

Python 3.6 модернизиран и преработен idlelib. Тази промяна включваше преименуването на няколко метода. Поради това idlelib.PyShell сега трябва да бъде достъпен с idlelib.pyshell. Следният фрагмент се основава на приетия отговор и трябва да работи за всяка версия на 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 __name__ == '__main__':
    main()
person Paul Wicking    schedule 09.02.2018

Използвам операционна система Ubuntu 15.04. Инсталирах някои пакети, използвайки virtualenv.

И така, за да стартирам файловете вътре в virtualenv, включително тези пакети, използвам следните команди в терминала

(Името на моята виртуална среда е venv):

#Activate the virtualenv venv
source venv/bin/activate

#To Run IDLE in virtualenv venv
python -m idlelib

След като стартирате IDLE, можете да отворите файл чрез клавишна комбинация ctrl+o.

person arsho    schedule 20.07.2016

Събирам няколко отговора заедно и ето как правя това в Window с напълно функционален пакетен файл.

Направете idle.bat в директорията Scripts на вашия virtualenv. Той ще създаде (освен ако не съществуват) и двете връзки към tcl и tk (версия 8.5 към момента на писане) и ще ги постави в директорията Lib на virtualenv, след което се задейства на празен ход. Копирайте и поставете точно този код в редактор. Променете имената на пътищата за вашата текуща инсталация на virtualenv и Python (моята е стандартната за 2.7), след което я запазете в 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()"

Стартирайте скрипта с Powershell (ИЗПЪЛНЕТЕ КАТО АДМИНИСТРАТОР!), за да отворите idle.

cd c:\<path to current virtualenv>\
./Scripts/idle.bat
person srock    schedule 10.09.2014
comment
Благодаря! Търсех скрипт точно като този, който бях направил по-рано на друга машина. - person Kashyap Nadig; 12.05.2016

@biomed Аз съм на Windows и опитвах това. В моята папка python2.6 трябваше да копирам папките python26/tcl/tcl8.5 и python/tcl/tk8.5 в python26/Lib и след това създадох скрипта по-горе в папката със скриптове на моя virtualenv. Работи страхотно.

person Tim    schedule 05.05.2011

За мен стартирането на нещо подобно просто работи (Linux терминал):

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

(venv е пътят към вашия venv очевидно)

person yan    schedule 14.09.2015