Automatycznie importuj moduły po wejściu do interpretera Pythona lub ipythona


120

Piszę import numpy as npprawie za każdym razem, gdy uruchamiam interpreter Pythona. Jak skonfigurować interpreter języka Python lub ipython, aby numpy był automatycznie importowany?

Odpowiedzi:


71

Użyj zmiennej środowiskowej PYTHONSTARTUP . Z oficjalnej dokumentacji:

Jeśli jest to nazwa czytelnego pliku, polecenia Pythona w tym pliku są wykonywane przed wyświetleniem pierwszej zachęty w trybie interaktywnym. Plik jest wykonywany w tej samej przestrzeni nazw, w której wykonywane są polecenia interaktywne, dzięki czemu obiekty zdefiniowane lub importowane w nim mogą być używane bez kwalifikacji w sesji interaktywnej.

Po prostu utwórz skrypt w języku Python z instrukcją import i wskaż zmienną środowiskową. Powiedziawszy to, pamiętaj, że „Wyraźne jest zawsze lepsze niż ukryte”, więc nie polegaj na tym zachowaniu w skryptach produkcyjnych.

W przypadku Ipython, zobacz ten samouczek dotyczący tworzenia pliku ipython_config


@mklauber, dzięki, ale zaakceptowane rozwiązanie jest przestarzałe. Jednak zainspirowało to moją edycję. @ OP: Zobacz moją zredagowaną odpowiedź
Dhara

3
@ user545424 w chwili pisania tego tekstu (ipython 1.1.0) obsługuje również PYTHONSTARTUP.
pflaquerre

Ustawienie env PYTHONSTARTUP="~/.startup.py"nie działało dla mnie
Seanny123

Tylko uwaga, export PYTHONSTARTUP=~/.python_shell_startup.pyaby ustawić zmienną.
PallavBakshi

78

W przypadku ipython są na to dwa sposoby. Oba dotyczą katalogu konfiguracyjnego ipython, który znajduje się w ~/.ipython.

  1. Utwórz własny profil ipython.
  2. Lub możesz dodać plik startowy do ~/.ipython/profile_default/startup/

Dla uproszczenia użyłbym opcji 2. Wszystko, co musisz zrobić, to umieścić plik .pylub .ipyw ~/.ipython/profile_default/startupkatalogu, a zostanie on automatycznie wykonany. Więc możesz po prostu umieścić import numpy as npw prostym pliku i będziesz mieć np w przestrzeni nazw swojego znaku zachęty ipython.

Opcja 2 będzie faktycznie działać z niestandardowym profilem, ale użycie niestandardowego profilu pozwoli ci zmienić wymagania uruchamiania i inną konfigurację w zależności od konkretnego przypadku. Jeśli jednak chcesz być zawszenp dla Ciebie dostępny, umieść go w katalogu startowym.

Więcej informacji o konfiguracji ipython. W docs mają znacznie bardziej kompletne wyjaśnienie.


2
W Ubuntu 14.04 katalog faktycznie jest następujący: ~/.config/ipython/profile_default/startup/a nie~/.ipython/profile_default/startup/
Peter

1
Niestety, powyższa opcja 2 nie pozwala na uzupełnianie kart.
user1717828

21

Używam pliku ~ / .startup.py w następujący sposób:

# 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

Następnie zdefiniuj PYTHONSTARTUP = ~ / .startup.py, a Python użyje go podczas uruchamiania powłoki.

Są tam instrukcje print, więc kiedy uruchamiam powłokę, otrzymuję przypomnienie, że działa i co zostało już zaimportowane. ppSkrót jest naprawdę poręczny zbyt ...


Nie działa dla mnie w systemie Linux. Czy muszę powiedzieć Pythonowi, aby przeszukał mój katalog domowy, czy coś?
Seanny123

ups: zapomniałem o ważnym kroku: dodałem go: zdefiniuj PYTHONSTARTUP
Ned Batchelder

Nigdy nie wiem, kiedy ~jako substytut $HOMEdziała, czy nie, ale zamiast tej względnej ścieżki musiałem użyć ścieżki absolutnej na MacOS, fish i python3.
rien333

@Ned Batchelder, wielkie dzięki, właśnie tego szukałem. pytanie boczne, używam tego w systemie Windows i skrót pp nie działa. Czy mógłbyś doradzić? >>> pp <function pprint at 0x0000020DAF90C8C8> >>> pp () Traceback (ostatnie wywołanie ostatnie): Plik "<stdin>", wiersz 1, w <module> TypeError: pprint () brak 1 wymagany argument pozycyjny: 'obiekt' >>>
Forever Learner

5

Tworząc niestandardowy skrypt startowy jak ravenac95 sugeruje jest najlepszy ogólny odpowiedź w większości przypadków, to nie będzie działać w sytuacji, gdy chcesz użyć from __future__ import X. Jeśli czasami pracujesz w Pythonie 2.x, ale chcesz użyć nowoczesnego podziału, jest tylko jeden sposób, aby to zrobić. Po utworzeniu profilu edytuj profile_default(w przypadku Ubuntu, w którym znajduje się ~/.ipython/profile_default) i dodaj coś takiego na dole:

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

3

Jako prostsza alternatywa dla zaakceptowanej odpowiedzi, w systemie Linux:

wystarczy zdefiniować alias, np. umieścić alias pynp='python -i -c"import numpy as np"'w swoim pliku ~ / .bash_aliases. Następnie możesz wywołać python + numpy za pomocą pynpi nadal możesz używać tylko pythona z python. Zachowanie skryptów Pythona pozostaje nietknięte.


PYTHONSTARTUPjest wywoływana tylko w trybie interaktywnym , więc zachowanie skryptów Pythona i tak pozostaje nietknięte. Można również utworzyć alias z odniesieniem do pliku:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

Możesz utworzyć normalny skrypt Pythona, jak import_numpy.pylub cokolwiek chcesz

#!/bin/env python3
import numpy as np

następnie uruchom go z -iflagą.

python -i import_numpy.py

W ten sposób uzyskasz elastyczność wyboru tylko modułów, które chcesz dla różnych projektów.


1

Jak ravenac95 wspomniał w swojej odpowiedzi , możesz utworzyć profil niestandardowy lub zmodyfikować profil domyślny. Ta odpowiedź to szybki przegląd poleceń Linuksa potrzebnych do import numpy as npautomatycznego.

Jeśli chcesz użyć niestandardowego profilu o nazwie numpy, uruchom:

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

Lub jeśli chcesz zmodyfikować domyślny profil, aby zawsze importować numpy:

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

Sprawdź samouczek konfiguracji IPython aby dowiedzieć się więcej o konfigurowaniu profili. Zobacz, .ipython/profile_default/startup/READMEaby zrozumieć, jak działa katalog startowy.


1

Moje domyślne ipythonwywołanie to

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

--pylabod ipythonjakiegoś czasu. Importuje numpyi (części) matplotlib. Dodałem --Inter...opcję, więc nie używa *importu, ponieważ wolę używać jawnegonp.... .

Może to być skrót, alias lub skrypt.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.