Подтвердить что ты не робот

Как запустить python Idle из виртуальной среды (virtualenv)

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

4b9b3361

Ответ 1

Для Python 3. 6+, см. Пол Wicking ниже ответ.

В Python до 3.6 IDLE по сути

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

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

Ответ 2

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

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

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

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

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

python -m idlelib.idle

Ответ 3

В Windows запуск Python script из командной строки, такой как 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

Ответ 4

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()

Ответ 5

Объединим несколько ответов, и вот как я это делаю в окне с полнофункциональным командным файлом.

Сделайте idle.bat в каталоге virtualenv Scripts. Он создаст (если они не существуют) обе ссылки на tcl и tk (версия 8.5 с момента написания) и поместит их в каталог virtualenv Lib, затем он простаивает. Скопируйте и вставьте этот код точно в редактор. Измените имена путей для вашей текущей версии 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()"

Запустите script с помощью Powershell (RUN AS ADMIN!), чтобы открыть режим ожидания.

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

Я использую операционную систему 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.