Importar módulos automáticamente al ingresar al intérprete de python o ipython

120

Me encuentro escribiendo import numpy as npcasi cada vez que enciendo el intérprete de Python. ¿Cómo configuro el intérprete de python o ipython para que numpy se importe automáticamente?

usuario545424
fuente

Respuestas:

71

Utilice la variable de entorno PYTHONSTARTUP . De la documentación oficial:

Si este es el nombre de un archivo legible, los comandos de Python en ese archivo se ejecutan antes de que se muestre el primer indicador en modo interactivo. El archivo se ejecuta en el mismo espacio de nombres donde se ejecutan los comandos interactivos para que los objetos definidos o importados en él se puedan usar sin calificación en la sesión interactiva.

Entonces, simplemente cree una secuencia de comandos de Python con la declaración de importación y apunte la variable de entorno hacia ella. Habiendo dicho eso, recuerde que 'Explícito siempre es mejor que implícito', así que no confíe en este comportamiento para los scripts de producción.

Para Ipython, consulte este tutorial sobre cómo crear un archivo ipython_config

Dhara
fuente
@mklauber, gracias, pero la solución aceptada está obsoleta. Sin embargo, inspiró mi edición. @ OP: Vea mi respuesta editada
Dhara
3
@ user545424 a partir de este escrito (ipython 1.1.0) también es compatible con PYTHONSTARTUP.
pflaquerre
La configuración env PYTHONSTARTUP="~/.startup.py"no funcionó para mí
Seanny123
Solo una nota export PYTHONSTARTUP=~/.python_shell_startup.pypara configurar la variable.
PallavBakshi
78

Para ipython, hay dos formas de lograrlo. Ambos involucran el directorio de configuración de ipython que se encuentra en ~/.ipython.

  1. Crea un perfil ipython personalizado.
  2. O puede agregar un archivo de inicio a ~/.ipython/profile_default/startup/

Por simplicidad, usaría la opción 2. Todo lo que tiene que hacer es colocar un archivo .pyo .ipyen el ~/.ipython/profile_default/startupdirectorio y se ejecutará automáticamente. Entonces, podría colocarlo import numpy as npen un archivo simple y tendrá np en el espacio de nombres de su indicador de ipython.

La opción 2 realmente funcionará con un perfil personalizado, pero el uso de un perfil personalizado le permitirá cambiar los requisitos de inicio y otra configuración según un caso particular. Sin embargo, si siempre desea npestar disponible para usted, colóquelo en el directorio de inicio.

Para obtener más información sobre la configuración de ipython. Los documentos tienen una explicación mucho más completa.

ravenac95
fuente
2
En Ubuntu 14.04, el directorio en realidad es: ~/.config/ipython/profile_default/startup/y no~/.ipython/profile_default/startup/
Peter
1
Desafortunadamente, la opción 2 anterior no permite completar la pestaña.
user1717828
21

Yo uso un archivo ~ / .startup.py como este:

# Ned's .startup.py file
print("(.startup.py)")
import datetime, os, pprint, re, sys, time
print("(imported datetime, os, pprint, re, sys, time)")

pp = pprint.pprint

Luego defina PYTHONSTARTUP = ~ / .startup.py, y Python lo usará al iniciar un shell.

Las declaraciones de impresión están ahí, así que cuando inicio el shell, recibo un recordatorio de que está en vigor y de lo que ya se ha importado. El ppatajo también es muy útil ...

Ned Batchelder
fuente
No funcionó para mí en Linux. ¿Tengo que decirle a Python que busque en mi directorio personal o algo así?
Seanny123
Ups: olvidé un paso importante: lo agregué: define PYTHONSTARTUP
Ned Batchelder
Nunca sé cuándo funciona o no ~como sustituto de $HOME, pero en lugar de esta ruta relativa tuve que usar una ruta absoluta en MacOS, fish y python3.
rien333
@Ned Batchelder, muchas gracias, esto es lo que estaba buscando. Pregunta lateral, estoy usando esto en Windows y el acceso directo de pp no ​​funciona. ¿Podría avisarme? >>> pp <función pprint en 0x0000020DAF90C8C8> >>> pp () Traceback (última llamada más reciente): Archivo "<stdin>", línea 1, en <module> TypeError: pprint () missing 1 argumento posicional requerido: 'objeto' >>>
Forever Learner
5

Si bien crear un script de inicio personalizado como sugiere ravenac95 es la mejor respuesta general para la mayoría de los casos, no funcionará en circunstancias en las que desee utilizar un archivo . Si a veces trabaja en Python 2.x pero desea utilizar la división moderna, solo hay una forma de hacerlo. Una vez que cree un perfil, edite el (Para Ubuntu, esto se encuentra en ) y agregue algo como lo siguiente en la parte inferior:from __future__ import Xprofile_default~/.ipython/profile_default

c.InteractiveShellApp.exec_lines = [
    'from __future__ import division, print_function',
    'import numpy as np',
    'import matplotlib.pyplot as plt',
    ]
Teque5
fuente
3

Como una alternativa más simple a la respuesta aceptada, en linux:

simplemente defina un alias, por ejemplo, póngalo alias pynp='python -i -c"import numpy as np"'en su archivo ~ / .bash_aliases. Luego puede invocar python + numpy con pynp, y aún puede usar solo python con python. El comportamiento de los scripts de Python no se modifica.

azul
fuente
PYTHONSTARTUPsolo se invoca en modo interactivo , por lo que el comportamiento de los scripts de Python se mantiene intacto de todos modos. También se podría crear un alias con una referencia de archivo:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab
2

Puede crear una secuencia de comandos de Python normal como import_numpy.pyo lo que quiera

#!/bin/env python3
import numpy as np

luego ejecútalo con la -ibandera.

python -i import_numpy.py

Una forma como esta le dará flexibilidad para elegir solo los módulos que desee para diferentes proyectos.

rɑːdʒɑ
fuente
1

Como mencionó ravenac95 en su respuesta , puede crear un perfil personalizado o modificar el perfil predeterminado. Esta respuesta es una vista rápida de los comandos de Linux necesarios para import numpy as npautomáticamente.

Si desea utilizar un perfil personalizado llamado numpy, ejecute:

ipython profile create numpy
echo 'import numpy as np' >> $(ipython locate profile numpy)/startup/00_imports.py
ipython --profile=numpy

O si desea modificar el perfil predeterminado para importar siempre numpy:

echo 'import numpy as np' >> $(ipython locate profile default)/startup/00_imports.py
ipython

Consulte el tutorial de configuración de IPython para leer más en profundidad sobre la configuración de perfiles. Consulte .ipython/profile_default/startup/READMEpara comprender cómo funciona el directorio de inicio.

anishpatel
fuente
1

Mi ipythoninvocación predeterminada es

ipython --pylab --nosep --InteractiveShellApp.pylab_import_all=False

--pylabha sido una ipythonopción desde hace algún tiempo. Importa numpyy (partes de) matplotlib. Agregué la --Inter...opción para que no use la *importación, ya que prefiero usar la explícita np.....

Puede ser un acceso directo, un alias o un script.

hpaulj
fuente