У меня есть пакет, который я установил из виртуальной среды. Если я просто запустил интерпретатор python, этот пакет можно импортировать просто отлично. Однако, если я запускаю Idle, этот пакет нельзя импортировать (поскольку он доступен только в одном виртуальном, а не глобальном). Как я могу запустить Idle из virtualenv, чтобы все пакеты из virtualenv были доступны?Как запустить python Idle из виртуальной среды (virtualenv)
ответ
IDLE, по существу
from idlelib.PyShell import main
if __name__ == '__main__':
main()
Таким образом, вы можете запустить его самостоятельно, если вы не построили virtualenv без пакетов по умолчанию.
@biomed Я нахожусь в Windows, и я пытался это сделать. В моей папке python2.6 мне пришлось скопировать папки python26/tcl/tcl8.5 и python/tcl/tk8.5 в python26/Lib, а затем я создал сценарий выше в папке скриптов virtualenv. Отлично.
+1, спасибо вам за это. – Sabuncu
В 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
+1, спасибо за это. Просто заметьте: НЕ устанавливайте Python в Program Files из-за пробела в пути! Virtualenv терпел неудачу для меня, и повторная установка Python под C: \ (по умолчанию) исправила его. – Sabuncu
Я не мог заставить файл 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 установлен неправильно. Есть идеи? – Sabuncu
ОК, скопировав две папки, как указано Тимом ниже (вместо символических ссылок), исправлена проблема, и я могу запустить IDLE через idle.bat. – Sabuncu
Положив несколько ответов вместе и вот как я делаю это на окне с полнофункциональным пакетным файлом.
Сделайте idle.bat в каталоге скриптов virtualenv. Он создаст (если они не существуют) обе ссылки на tcl и tk (версия 8.5 на момент написания) и поместит их в директорию Lib 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()"
Запустите сценарий с Powershell (RUN AS ADMIN!), Чтобы открыть простоя.
cd c:\<path to current virtualenv>\
./Scripts/idle.bat
Спасибо! Я искал сценарий, подобный этому, который я сделал ранее на другой машине. –
Для меня начинает что-то вроде этого просто работает (Linux терминал):
source venv/bin/activate && python `which idle` &
(venv это путь к venv очевидно)
Я бегу .\(virtualenv dir)\Scripts\activate.bat
сценарий из командной строки, а затем do:
python -m idlelib.idle
От this answer.
Спасибо - это отлично работает на окнах. – Simon
он также работает на Mac. –
Я использую 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 сочетание клавиш.
Python 3.6 modernized and refactoredidlelib
. Это изменение включало переименование нескольких методов. Из-за этого к 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()
Из какой папки я запустил бы этот сценарий? Спасибо –
@Khnle: из папки, где находится ваш проект, по-видимому, после того, как вы активировали virtualenv. Я просто попробовал, и он работает. Поместите этот скрипт в 'bin' вашего virtualenv. – 9000
Я создал незанятый скрипт в bin/моего virtualenv, и я использовал виртуальный питон в своем shebang, но он жалуется, что не смог найти Tkinter. Я проверил, и Tkinter можно импортировать в обычный python2.7.1, но я не могу импортировать Tkinter из моего виртуального python. Как я могу сделать Tkinter доступным для моего виртуального python (я не использовал сайтов-пакетов по другой причине) – biomed