У меня есть пакет, который я установил из виртуальной среды. Если я просто запустил интерпретатор python, этот пакет можно импортировать просто отлично. Однако, если я запускаю Idle, этот пакет нельзя импортировать (поскольку он доступен только в одном виртуальном, а не глобальном). Как я могу запустить Idle из virtualenv, чтобы все пакеты из virtualenv были доступны?
Как запустить python Idle из виртуальной среды (virtualenv)
Ответ 1
Для Python 3. 6+, см. Пол Wicking ниже ответ.
В Python до 3.6 IDLE по сути
from idlelib.PyShell import main
if __name__ == '__main__':
main()
Таким образом, вы можете запустить его самостоятельно, если вы не создали virtualenv без пакетов по умолчанию.
Ответ 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.