Как запустить Python Idle из виртуальной среды (virtualenv) - PullRequest
38 голосов
/ 07 февраля 2011

У меня есть пакет, который я установил из виртуальной среды.Если я просто запускаю интерпретатор python, этот пакет может быть импортирован просто отлично.Однако, если я запускаю Idle, этот пакет не может быть импортирован (поскольку он доступен только в одном конкретном virtualenv и не является глобальным)Как я могу запустить Idle из virtualenv, чтобы все пакеты из virtualenv были доступны?

Ответы [ 8 ]

46 голосов
/ 29 июня 2016

Краткий ответ

  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, вероятно, будут выглядетьthis:

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 или fish , активируйте среду с помощью:

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

Для csh и fish существуют специфичные для оболочкискрипты для активации виртуальной среды (activate.csh и activate.fish соответственно), и их можно запускать как скрипт activate.

После активации виртуальной среды во всех операционных системах, запустите следующуюзапустит IDLE с доступом к пакетам, установленным в виртуальной среде:

python -m venv idlelib.idle
36 голосов
/ 07 февраля 2011

IDLE - это, по сути,

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

Так что вы можете запустить его самостоятельно, если вы не создали virtualenv без пакетов по умолчанию.

9 голосов
/ 28 апреля 2012

В 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 на установку base 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
3 голосов
/ 10 сентября 2014

Соединение нескольких ответов и вот как я делаю это в 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 (RUN AS ADMIN!), Чтобы открыть его в режиме ожидания.

cd c:\<path to current virtualenv>\
./Scripts/idle.bat
2 голосов
/ 09 февраля 2018

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()
2 голосов
/ 05 мая 2011

@ biomed Я на Windows, и я пытался это.В моей папке python2.6 мне пришлось скопировать папки python26 / tcl / tcl8.5 и python / tcl / tk8.5 в python26 / Lib, а затем я создал вышеупомянутый скрипт в папке сценариев моего virtualenv.Работал отлично.

1 голос
/ 20 июля 2016

Я использую 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 сочетание клавиш.

1 голос
/ 14 сентября 2015

Для меня запуск чего-то подобного просто работает (терминал Linux):

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

(очевидно, venv - это путь к вашему вену)

...