2011-02-07 3 views
27

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

ответ

33

IDLE, по существу

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

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

+1

Из какой папки я запустил бы этот сценарий? Спасибо –

+0

@Khnle: из папки, где находится ваш проект, по-видимому, после того, как вы активировали virtualenv. Я просто попробовал, и он работает. Поместите этот скрипт в 'bin' вашего virtualenv. – 9000

+0

Я создал незанятый скрипт в bin/моего virtualenv, и я использовал виртуальный питон в своем shebang, но он жалуется, что не смог найти Tkinter. Я проверил, и Tkinter можно импортировать в обычный python2.7.1, но я не могу импортировать Tkinter из моего виртуального python. Как я могу сделать Tkinter доступным для моего виртуального python (я не использовал сайтов-пакетов по другой причине) – biomed

2

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

+0

+1, спасибо вам за это. – Sabuncu

9

В 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 
+0

+1, спасибо за это. Просто заметьте: НЕ устанавливайте Python в Program Files из-за пробела в пути! Virtualenv терпел неудачу для меня, и повторная установка Python под C: \ (по умолчанию) исправила его. – Sabuncu

+0

Я не мог заставить файл 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

+0

ОК, скопировав две папки, как указано Тимом ниже (вместо символических ссылок), исправлена ​​проблема, и я могу запустить IDLE через idle.bat. – Sabuncu

3

Положив несколько ответов вместе и вот как я делаю это на окне с полнофункциональным пакетным файлом.

Сделайте 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 
+0

Спасибо! Я искал сценарий, подобный этому, который я сделал ранее на другой машине. –

0

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

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

(venv это путь к venv очевидно)

21

Я бегу .\(virtualenv dir)\Scripts\activate.bat сценарий из командной строки, а затем do:

python -m idlelib.idle 

От this answer.

+1

Спасибо - это отлично работает на окнах. – Simon

+1

он также работает на Mac. –

1

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

0

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