Impor modul secara otomatis saat memasukkan interpreter python atau ipython

120

Saya menemukan diri saya mengetik import numpy as nphampir setiap kali saya menjalankan penerjemah python. Bagaimana cara mengatur juru bahasa python atau ipython sehingga numpy diimpor secara otomatis?

pengguna545424
sumber

Jawaban:

71

Gunakan variabel lingkungan PYTHONSTARTUP . Dari dokumentasi resmi:

Jika ini adalah nama file yang dapat dibaca, perintah Python dalam file tersebut dijalankan sebelum prompt pertama ditampilkan dalam mode interaktif. File tersebut dijalankan di namespace yang sama di mana perintah interaktif dijalankan sehingga objek yang ditentukan atau diimpor di dalamnya dapat digunakan tanpa kualifikasi dalam sesi interaktif.

Jadi, buat saja skrip python dengan pernyataan import dan arahkan variabel lingkungan ke sana. Karena itu, ingatlah bahwa 'Eksplisit selalu lebih baik daripada implisit', jadi jangan mengandalkan perilaku ini untuk skrip produksi.

Untuk Ipython, lihat tutorial ini tentang cara membuat file ipython_config

Dhara
sumber
@mklauber, terima kasih, tetapi solusi yang diterima di sana sudah tidak digunakan lagi. Namun, itu menginspirasi suntingan saya. @ OP: Lihat jawaban saya yang diedit
Dhara
3
@ user545424 pada tulisan ini (ipython 1.1.0) mendukung PYTHONSTARTUP juga.
pflaquerre
Pengaturan env PYTHONSTARTUP="~/.startup.py"tidak berhasil untuk saya
Seanny123
Sekadar catatan export PYTHONSTARTUP=~/.python_shell_startup.pyuntuk mengatur variabel.
PallavBakshi
78

Untuk ipython, ada dua cara untuk mencapai ini. Keduanya melibatkan direktori konfigurasi ipython yang terletak di ~/.ipython.

  1. Buat profil ipython kustom.
  2. Atau Anda dapat menambahkan file startup ke ~/.ipython/profile_default/startup/

Untuk mempermudah, saya akan menggunakan opsi 2. Yang harus Anda lakukan adalah menempatkan file .pyatau .ipydi ~/.ipython/profile_default/startupdirektori dan secara otomatis akan dijalankan. Jadi Anda bisa menempatkan sederhana import numpy as npdalam file sederhana dan Anda akan memiliki np di namespace dari prompt ipython Anda.

Opsi 2 sebenarnya akan berfungsi dengan profil khusus, tetapi menggunakan profil khusus akan memungkinkan Anda untuk mengubah persyaratan startup dan konfigurasi lain berdasarkan kasus tertentu. Namun, jika Anda akan lebih selalu seperti npmenjadi tersedia untuk Anda maka dengan segala cara meletakkannya di direktori startup.

Untuk informasi lebih lanjut tentang konfigurasi ipython. The docs memiliki penjelasan yang jauh lebih lengkap.

ravenac95
sumber
2
Di Ubuntu 14.04 direktori sebenarnya adalah: ~/.config/ipython/profile_default/startup/dan bukan~/.ipython/profile_default/startup/
Peter
1
Sayangnya, opsi 2 di atas tidak memungkinkan penyelesaian tab.
pengguna1717828
21

Saya menggunakan file ~ / .startup.py seperti ini:

# 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

Kemudian tentukan PYTHONSTARTUP = ~ / .startup.py, dan Python akan menggunakannya saat memulai shell.

Pernyataan cetak ada di sana jadi ketika saya memulai shell, saya mendapatkan pengingat bahwa itu berlaku, dan apa yang sudah diimpor. The ppshortcut benar-benar berguna juga ...

Ned Batchelder
sumber
Tidak berhasil untuk saya di Linux. Apakah saya harus memberi tahu Python untuk mencari di direktori home saya atau sesuatu?
Seanny123
oops: lupa langkah penting: Saya telah menambahkannya: define PYTHONSTARTUP
Ned Batchelder
Saya tidak pernah tahu kapan ~sebagai pengganti $HOMEbekerja atau tidak, tetapi alih-alih jalur relatif ini saya harus menggunakan jalur absolut di MacOS, ikan, dan python3.
rien333
@Ned Batchelder, terima kasih banyak, ini yang saya cari. pertanyaan sampingan, saya menggunakan ini di windows dan pintasan pp tidak berfungsi. Bisakah Anda memberi tahu? >>> pp <function pprint di 0x0000020DAF90C8C8> >>> pp () Traceback (panggilan terakhir terakhir): File "<stdin>", baris 1, di <module> TypeError: pprint () missing 1 argumen posisi yang diperlukan: 'object' >>>
Forever Learner
5

Meskipun membuat skrip startup khusus seperti yang disarankan ravenac95 adalah jawaban umum terbaik untuk kebanyakan kasus, itu tidak akan berfungsi dalam keadaan di mana Anda ingin menggunakan file . Jika Anda terkadang bekerja dengan Python 2.x tetapi ingin menggunakan pembagian modern, hanya ada satu cara untuk melakukannya. Setelah Anda membuat profil, edit (Untuk Ubuntu tempat ini berada ) dan tambahkan sesuatu seperti berikut ke bawah: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
sumber
3

Sebagai alternatif yang lebih sederhana dari jawaban yang diterima, di linux:

cukup definisikan alias, misalnya masukkan alias pynp='python -i -c"import numpy as np"'file ~ / .bash_aliases Anda. Anda kemudian dapat memanggil python + numpy dengan pynp, dan Anda masih dapat menggunakan python dengan python. Perilaku skrip Python tidak tersentuh.

biru
sumber
PYTHONSTARTUPhanya dipanggil pada mode interaktif , jadi perilaku skrip python tetap tidak tersentuh. Alias ​​juga dapat dibuat dengan referensi file:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab
2

Anda dapat membuat skrip python normal import_numpy.pyatau apapun yang Anda suka

#!/bin/env python3
import numpy as np

lalu luncurkan dengan -ibendera.

python -i import_numpy.py

Cara seperti ini akan memberi Anda fleksibilitas untuk memilih hanya modul yang Anda inginkan untuk proyek yang berbeda.

rɑːdʒɑ
sumber
1

Seperti yang disebutkan ravenac95 dalam jawabannya , Anda dapat membuat profil kustom atau mengubah profil default. Jawaban ini adalah tampilan cepat dari perintah Linux yang diperlukanimport numpy as np secara otomatis.

Jika Anda ingin menggunakan profil khusus yang disebut numpy, jalankan:

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

Atau jika Anda ingin mengubah profil default untuk selalu mengimpor numpy:

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

Lihat tutorial konfigurasi IPython untuk membaca lebih mendalam tentang mengonfigurasi profil. Lihat .ipython/profile_default/startup/READMEuntuk memahami cara kerja direktori startup.

anishpatel
sumber
1

ipythonDoa default saya adalah

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

--pylabtelah menjadi ipythonpilihan selama beberapa waktu. Itu mengimpor numpydan (bagian dari) matplotlib. Saya telah menambahkan --Inter...opsi sehingga tidak menggunakan *impor, karena saya lebih suka menggunakan eksplisit np.....

Ini bisa berupa jalan pintas, alias atau skrip.

hpaulj
sumber