2012-02-23 13 views
12

Me gustaría jugar en el intérprete de Python pero con un montón de importaciones y la configuración del objeto completada. Ahora mismo estoy lanzando el intérprete en la línea de comando y haciendo el trabajo de configuración todo el tiempo. ¿Hay alguna forma de ejecutar el intérprete de línea de comandos con todo el trabajo de inicialización realizado?ejecute el intérprete de línea de comandos de python con las importaciones cargadas automáticamente

Ex:

# Done automatically. 
import foo 
import baz 
l = [1,2,3,4] 
# Launch the interpreter. 
launch_interpreter() 
>> print l 
>> [1,2,3,4] 

Respuesta

20

Puede crear un script con el código que desee ejecutar de forma automática, a continuación, utilizar python -i para ejecutarlo. Por ejemplo, crear un script (vamos a llamarlo script.py) con esto:

import foo 
import baz 
l = [1,2,3,4] 

y ejecute el guión

$ python -i script.py 
>>> print l 
[1, 2, 3, 4] 

Después de que el guión ha completado la ejecución, pitón le deja en una sesión interactiva con los resultados de la secuencia de comandos todavía alrededor.

Si realmente quiere algunas cosas cada vez que se ejecuta Python, puede establecer la variable de entorno PYTHONSTARTUP a un script que se ejecuta cada vez que se inicia pitón. Consulte la documentación en el interactive startup file.

+1

Docs para el archivo de inicio interactiva están ahora aquí: https://docs.python.org/3/tutorial/appendix.html#the-interactive-startup-file –

0

Puede usar la opción -s al iniciar la línea de comando. Los detalles se dan en la documentación here

+0

Esto es para IDLE no, para una sesión de consola simple, ¿no? – DNA

+0

Sí, eso es correcto. Esto es para IDLE. – vaisakh

0

Creo que sé lo que quiere hacer. Es posible que desee comprobar IPython, porque no puede iniciar el intérprete de Python sin dar la opción -i (al menos no directamente). Esto es lo que hice en mi proyecto:

def ipShell(): 
    '''Starts the interactive IPython shell''' 
    import IPython 
    from IPython.config.loader import Config 
    cfg = Config() 
    cfg.TerminalInteractiveShell.confirm_exit = False 
    IPython.embed(config=cfg, display_banner=False) 
# Then add the following line to start the shell 
ipShell() 

Es necesario tener cuidado, sin embargo, porque la cáscara tendrá el espacio de nombres del módulo que la función se define ipShell(). Si coloca la definición en el archivo que ejecuta, podrá acceder al globals() que desee. Podría haber otras soluciones para inyectar el espacio de nombres que desee, pero usted tendría que dar argumentos a la función en ese caso.

EDITAR

la siguiente función por defecto del espacio de nombres de la persona que llama (__main__.__dict__).

def ipShell(): 
    '''Starts the interactive IPython shell 
    with the namespace __main__.__dict__''' 
    import IPython 
    from __main__ import __dict__ as ns 
    from IPython.config.loader import Config 
    cfg = Config() 
    cfg.TerminalInteractiveShell.confirm_exit = False 
    IPython.embed(config=cfg, user_ns=ns, display_banner=False) 

sin argumentos adicionales.

2

Me encontré con esta pregunta al intentar configurar un nuevo desk para mi investigación y encontré que las respuestas anteriores no encajaban con mi deseo: contener toda la configuración del escritorio dentro de un archivo (lo que significa que no crearía un por separado script.py según lo sugerido por @srgerg).

Esta es la forma en que terminó el logro de mi objetivo:

export PYTHONPATH=$READ_GEN_PATH:$PYTHONPATH 

alias prepy="python3 -i -c \" 
from naive_short_read_gen import ReadGen 
from neblue import neblue\"" 

En este caso neblue está en la caquexia crónica (por lo que no se requiere ninguna ampliación de la ruta allí), mientras que naive_short_read_gen se encuentra en un directorio arbitrario en mi sistema, que se especifica mediante $READ_GEN_PATH.

Puede hacer esto en una sola línea si es necesario: alias prepy=PYTHONPATH=$EXTRA_PATH:$PYTHONPATH python3 -i -c ....

Cuestiones relacionadas