2011-02-07 24 views
27

Tengo un paquete que instalé desde un entorno virtual. Si acabo de lanzar el intérprete de Python, ese paquete se puede importar muy bien. Sin embargo, si inicio Idle, ese paquete no se puede importar (ya que solo está disponible en un virtualenv particular y no global). ¿Cómo puedo ejecutar Idle desde un virtualenv, para que todos los paquetes de virtualenv estén disponibles?Cómo iniciar Python Idle desde un entorno virtual (virtualenv)

Respuesta

33

IDLE es esencialmente

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

para poder abrir usted mismo a menos que construyó el virtualenv sin paquetes predeterminados.

+1

¿Desde qué carpeta ejecutaría esas secuencias de comandos? Gracias –

+0

@Khnle: desde la carpeta donde reside su proyecto, al parecer, después de haber activado el virtualenv. Lo probé y funciona. Coloque esta secuencia de comandos en el 'contenedor' de su virtualenv. – 9000

+0

Creé un script inactivo en el bin/de mi virtualenv y usé el virtualenv python en mi shebang pero se queja por no poder encontrar Tkinter. Comprobé y Tkinter se puede importar en el python2.7.1 normal pero no puedo importar Tkinter de mi python virtualenv. ¿Cómo puedo hacer que Tkinter esté disponible para mi virtualenv python? (No utilicé paquetes de sitios por algún otro motivo) – biomed

2

@biomed Estoy en Windows y estaba intentando esto. En mi carpeta python2.6 tuve que copiar las carpetas python26/tcl/tcl8.5 y python/tcl/tk8.5 a python26/Lib y luego creé el script arriba en la carpeta de scripts de mi virtualenv. Funcionó muy bien.

+0

+1, gracias por esto. – Sabuncu

9

En Windows, un script de Python ejecutado desde una línea de comandos como este some_script.py podría ser ejecutado por otro intérprete de Python que el utilizado al usar el comando python some_script.py (depende de la asociación de archivos py). Si uno quiere evitar este problema, es mejor crear un archivo por lotes idle.bat con el contenido python -c "from idlelib.PyShell import main; main()" y colocarlo en la carpeta Scripts en el virtualenv. Además, al igual que otros señaló inactivo, las carpetas tcl y tk funcionan. La solución más sencilla es crear enlaces simbólicos de virtualenv a la base de instalación Python como esto

(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, gracias por esto. Solo una nota: ¡NO instale Python bajo Archivos de programa debido al espacio en la ruta de acceso! Virtualenv estaba fallando para mí, y la reinstalación de Python bajo C: \ (por defecto) lo solucionó. – Sabuncu

+0

No pude obtener el archivo idle.bat para trabajar en mi sistema Python 2.7, incluso después de crear los enlaces de la carpeta simbólica. Inicialmente los creé en Lib, y el lanzamiento de idle.bat falló. Luego creé una carpeta llamada tcl en el entorno virtual, y creé los enlaces de la carpeta simbólica allí, y aun así produjo un error: Traceback (llamada más reciente): "... _tkinter.TclError: no se puede encontrar un init utilizable .tcl en los siguientes directorios: {C: \ Users \ AMS \ my_env \ tcl \ tcl8.5} C: /Python27/lib/tcl8.5 C: /Users/AMS/my_env/lib/tcl8.5 ... Esto probablemente significa que Tcl no se instaló correctamente ". ¿Algunas ideas? – Sabuncu

+0

OK, copiar las dos carpetas como Tim ha señalado a continuación (en lugar de enlaces simbólicos) solucionó el problema, y ​​puedo ejecutar IDLE a través de idle.bat. – Sabuncu

3

Poner algunas respuestas juntos y aquí es cómo hacer esto en la ventana con un archivo por lotes totalmente funcional.

Haga idle.bat en el directorio de Scripts de su virtualenv. Creará (a menos que existan) ambos enlaces a tcl y tk (versión 8.5 desde el momento de la escritura) y los colocará en el directorio Lib de virtualenv y luego se desactivará. Copie y pegue este código exactamente en un editor. Cambie los nombres de ruta para su instalación actual de Virtualenv y Python (el mío es el estándar para 2.7) y guárdelo en 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()" 

Ejecute la secuencia de comandos con Powershell (¡FUNCIONAMIENTO COMO ADMIN!) Para abrir inactivo.

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

Gracias! Estaba buscando un script exactamente como este que había hecho anteriormente en una máquina diferente. –

0

Para mí lanzar algo como esto sólo funciona (terminal de Linux):

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

(Venv es ruta a su Venv obviamente)

21

que ejecute el script .\(virtualenv dir)\Scripts\activate.bat desde la línea de comandos, a continuación, do:

python -m idlelib.idle 

De this answer.

+1

Gracias - esto funciona perfectamente en Windows. – Simon

+1

también funciona en Mac. –

1

Estoy usando Ubuntu 15.04 sistema operativo. He instalado algunos paquetes usando virtualenv.

Por lo tanto, para ejecutar los archivos dentro virtualenv incluyendo aquellos paquetes que uso los siguientes comandos en el terminal

(Nombre de mi entorno virtual es Venv):

#Activate the virtualenv venv 
source venv/bin/activate 

#To Run IDLE in virtualenv venv 
python -m idlelib 

Después de ejecutar el IDLE, puede abrir el archivo usando ctrl + o atajo de teclado.

0

Python 3.6 modernized and refactoredidlelib. Este cambio incluyó el cambio de nombre de varios métodos. Debido a esto, ahora se debe acceder al idlelib.PyShell con idlelib.pyshell. El siguiente fragmento se basa en la respuesta aceptada y debería funcionar para cualquier versión de 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() 
Cuestiones relacionadas