Importa automaticamente i moduli quando si accede all'interprete python o ipython


120

Mi ritrovo a digitare import numpy as npquasi ogni volta che accendo l'interprete Python. Come imposto l'interprete python o ipython in modo che numpy venga importato automaticamente?

Risposte:


71

Usa la variabile d'ambiente PYTHONSTARTUP . Dalla documentazione ufficiale:

Se questo è il nome di un file leggibile, i comandi Python in quel file vengono eseguiti prima che il primo prompt venga visualizzato in modalità interattiva. Il file viene eseguito nello stesso spazio dei nomi in cui vengono eseguiti i comandi interattivi in ​​modo che gli oggetti definiti o importati in esso possano essere utilizzati senza qualificazione nella sessione interattiva.

Quindi, crea uno script python con l'istruzione import e punta la variabile di ambiente su di esso. Detto questo, ricorda che "Explicit è sempre meglio di implicit", quindi non fare affidamento su questo comportamento per gli script di produzione.

Per Ipython, guarda questo tutorial su come creare un file ipython_config


@mklauber, grazie, ma la soluzione accettata è deprecata. Tuttavia, ha ispirato la mia modifica. @ OP: Vedi la mia risposta modificata
Dhara,

3
@ user545424 al momento della stesura di questo articolo (ipython 1.1.0) supporta anche PYTHONSTARTUP.
pflaquerre

L'impostazione env PYTHONSTARTUP="~/.startup.py"non ha funzionato per me
Seanny123

Solo una nota export PYTHONSTARTUP=~/.python_shell_startup.pyper impostare la variabile.
PallavBakshi

78

Per ipython, ci sono due modi per ottenere questo risultato. Entrambi coinvolgono la directory di configurazione di ipython che si trova in ~/.ipython.

  1. Crea un profilo ipython personalizzato.
  2. Oppure puoi aggiungere un file di avvio a ~/.ipython/profile_default/startup/

Per semplicità, userei l'opzione 2. Tutto quello che devi fare è inserire un file .pyo .ipynella ~/.ipython/profile_default/startupdirectory e verrà eseguito automaticamente. Quindi puoi semplicemente import numpy as npmetterlo in un semplice file e avrai np nello spazio dei nomi del tuo prompt di ipython.

L'opzione 2 funzionerà effettivamente con un profilo personalizzato, ma l'utilizzo di un profilo personalizzato ti consentirà di modificare i requisiti di avvio e altre configurazioni in base a un caso particolare. Tuttavia, se aveste sempre come npdi essere a disposizione di voi poi con tutti i mezzi messi nella directory di avvio.

Per ulteriori informazioni sulla configurazione di ipython. I documenti hanno una spiegazione molto più completa.


2
In Ubuntu 14.04 la directory in realtà è: ~/.config/ipython/profile_default/startup/e non~/.ipython/profile_default/startup/
Peter

1
Sfortunatamente, l'opzione 2 sopra non consente il completamento della scheda.
user1717828

21

Uso un file ~ / .startup.py come questo:

# 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

Quindi definire PYTHONSTARTUP = ~ / .startup.py e Python lo userà all'avvio di una shell.

Le istruzioni print sono lì, quindi quando avvio la shell, ricevo un promemoria che è in vigore e cosa è già stato importato. Anche la ppscorciatoia è davvero utile ...


Non ha funzionato per me su Linux. Devo dire a Python di cercare nella mia home directory o qualcosa del genere?
Seanny123

oops: ho dimenticato un passaggio importante: l'ho aggiunto: definire PYTHONSTARTUP
Ned Batchelder

Non so mai quando il ~sostituto $HOMEfunziona o meno, ma invece di questo percorso relativo ho dovuto usare un percorso assoluto su MacOS, fish e python3.
rien333

@ Ned Batchelder, grazie mille, questo è quello che stavo cercando. domanda laterale, lo sto usando su Windows e il collegamento pp non funziona. Potete avvisare? >>> pp <function pprint at 0x0000020DAF90C8C8> >>> pp () Traceback (la chiamata più recente per ultima): File "<stdin>", riga 1, in <module> TypeError: pprint () mancante 1 argomento posizionale richiesto: 'oggetto' >>>
Forever Learner

5

Sebbene la creazione di uno script di avvio personalizzato come suggerisce ravenac95 sia la migliore risposta generale per la maggior parte dei casi, non funzionerà nelle circostanze in cui si desidera utilizzare un file . Se a volte lavori in Python 2.x ma vuoi usare la divisione moderna, c'è solo un modo per farlo. Dopo aver creato un profilo, modifica il (Per Ubuntu si trova in ) e aggiungi qualcosa come il seguente in fondo: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',
    ]

3

Come alternativa più semplice alla risposta accettata, su Linux:

definisci semplicemente un alias, ad esempio mettilo alias pynp='python -i -c"import numpy as np"'nel tuo file ~ / .bash_aliases. Puoi quindi invocare python + numpy con pynpe puoi ancora usare solo python con python. Il comportamento degli script Python è rimasto inalterato.


PYTHONSTARTUPviene invocato solo in modalità interattiva , quindi il comportamento degli script Python viene comunque mantenuto invariato. Si potrebbe anche creare un alias con un riferimento al file:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

Puoi creare un normale script Python come import_numpy.pyo come preferisci

#!/bin/env python3
import numpy as np

quindi lanciarlo con -iflag.

python -i import_numpy.py

In questo modo ti darà la flessibilità di scegliere solo i moduli che desideri per diversi progetti.


1

Come menzionato da ravenac95 nella sua risposta , puoi creare un profilo personalizzato o modificare il profilo predefinito. Questa risposta è una rapida visualizzazione dei comandi Linux necessari per eseguire import numpy as npautomaticamente.

Se desideri utilizzare un profilo personalizzato chiamato numpy, esegui:

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

Oppure, se vuoi modificare il profilo predefinito per importare sempre numpy:

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

Dai un'occhiata al tutorial sulla configurazione di IPython per saperne di più sulla configurazione dei profili. Vedere .ipython/profile_default/startup/READMEper capire come funziona la directory di avvio.


1

La mia ipythonchiamata predefinita è

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

--pylabè stata ipythonun'opzione per qualche tempo. Importa numpye (parti di) matplotlib. Ho aggiunto l' --Inter...opzione in modo che non utilizzi l' *importazione, poiché preferisco utilizzare l'esplicito np.....

Può essere una scorciatoia, un alias o uno script.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.