นำเข้าโมดูลโดยอัตโนมัติเมื่อป้อนตัวแปล python หรือ ipython


120

ฉันพบว่าตัวเองพิมพ์import numpy as npเกือบทุกครั้งที่เปิดเครื่องล่ามงูหลาม ฉันจะตั้งค่าตัวแปล python หรือ ipython เพื่อให้นำเข้าโดยอัตโนมัติได้อย่างไร

คำตอบ:


71

ใช้ตัวแปรสภาพแวดล้อมPYTHONSTARTUP จากเอกสารอย่างเป็นทางการ:

หากนี่คือชื่อของไฟล์ที่อ่านได้คำสั่ง Python ในไฟล์นั้นจะถูกเรียกใช้งานก่อนที่พร้อมต์แรกจะแสดงในโหมดโต้ตอบ ไฟล์ถูกดำเนินการในเนมสเปซเดียวกับที่มีการเรียกใช้คำสั่งแบบโต้ตอบเพื่อให้สามารถใช้อ็อบเจ็กต์ที่กำหนดหรืออิมพอร์ตในไฟล์ได้โดยไม่ต้องมีคุณสมบัติในเซสชันแบบโต้ตอบ

ดังนั้นเพียงสร้างสคริปต์ python ด้วยคำสั่ง import และชี้ตัวแปรสภาพแวดล้อมไปที่มัน ต้องบอกว่าอย่าลืมว่า 'Explicit ดีกว่าโดยนัยเสมอ' ดังนั้นอย่าใช้พฤติกรรมนี้สำหรับสคริปต์การผลิต

สำหรับ IPython ดูนี้สอนเกี่ยวกับวิธีการทำไฟล์ ipython_config


@mklauber ขอบคุณ แต่โซลูชันที่ยอมรับนั้นเลิกใช้แล้ว อย่างไรก็ตามมันสร้างแรงบันดาลใจในการแก้ไขของฉัน @ OP: ดูคำตอบที่แก้ไขของฉัน
Dhara

3
@ user545424 ขณะเขียนนี้ (ipython 1.1.0) รองรับ PYTHONSTARTUP ด้วย
pflaquerre

การตั้งค่าenv PYTHONSTARTUP="~/.startup.py"ไม่ได้ผลสำหรับฉัน
Seanny123

เพียงบันทึกexport PYTHONSTARTUP=~/.python_shell_startup.pyเพื่อตั้งค่าตัวแปร
PallavBakshi

78

สำหรับ ipython มีสองวิธีในการบรรลุเป้าหมายนี้ ทั้งสองเกี่ยวข้องกับไดเร็กทอรีคอนฟิกูเรชันของ ipython ซึ่งอยู่ใน~/.ipython.

  1. สร้างโปรไฟล์ ipython แบบกำหนดเอง
  2. หรือคุณสามารถเพิ่มไฟล์เริ่มต้นใน ~/.ipython/profile_default/startup/

เพื่อความง่ายฉันจะใช้ตัวเลือก 2 สิ่งที่คุณต้องทำคือวางไฟล์.pyหรือ.ipyไฟล์ใน~/.ipython/profile_default/startupไดเร็กทอรีและมันจะถูกเรียกใช้โดยอัตโนมัติ ดังนั้นคุณสามารถวางimport numpy as npในไฟล์ธรรมดา ๆ ได้และคุณจะมี np ในเนมสเปซของพรอมต์ ipython ของคุณ

ตัวเลือก 2 จะใช้งานได้จริงกับโปรไฟล์ที่กำหนดเอง แต่การใช้โปรไฟล์ที่กำหนดเองจะช่วยให้คุณสามารถเปลี่ยนข้อกำหนดในการเริ่มต้นและการกำหนดค่าอื่น ๆ ตามกรณีเฉพาะได้ แต่ถ้าคุณต้องการเสมอเหมือนnpจะมีให้คุณแล้วโดยทั้งหมดใส่ไว้ในไดเรกทอรีเริ่มต้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า ipython เอกสารมีคำอธิบายที่สมบูรณ์มากขึ้น


2
ใน Ubuntu 14.04 ไดเรกทอรีคือ: ~/.config/ipython/profile_default/startup/ไม่ใช่~/.ipython/profile_default/startup/
ปีเตอร์

1
ขออภัยตัวเลือกที่ 2 ด้านบนไม่อนุญาตให้มีการเติมแท็บ
user1717828

21

ฉันใช้ไฟล์ ~ / .startup.py ดังนี้:

# 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

จากนั้นกำหนด PYTHONSTARTUP = ~ / .startup.py และ Python จะใช้เมื่อเริ่มเชลล์

คำสั่งการพิมพ์อยู่ที่นั่นเมื่อฉันเริ่มเชลล์ฉันได้รับการแจ้งเตือนว่ามีผลบังคับใช้และสิ่งที่นำเข้าแล้ว ppลัดเป็นประโยชน์จริงๆเกินไป ...


ไม่ได้ผลสำหรับฉันบน Linux ฉันต้องบอกให้ Python ดูในโฮมไดเร็กทอรีของฉันหรืออะไร?
Seanny123

อ๊ะ: ลืมขั้นตอนสำคัญ: ฉันได้เพิ่มแล้ว: กำหนด PYTHONSTARTUP
Ned Batchelder

ฉันไม่รู้ว่าเมื่อใดที่~ใช้แทน$HOMEผลงานได้ แต่แทนที่จะเป็นเส้นทางสัมพัทธ์นี้ฉันต้องใช้เส้นทางสัมบูรณ์บน MacOS, fish และ python3
rien333

@Ned Batchelder ขอบคุณมากนี่คือสิ่งที่ฉันกำลังมองหา คำถามด้านข้างฉันใช้สิ่งนี้บน windows และทางลัด pp ไม่ทำงาน คุณช่วยแนะนำได้ไหม >>> pp <function pprint ที่ 0x0000020DAF90C8C8> >>> pp () Traceback (โทรล่าสุดล่าสุด): ไฟล์ "<stdin>" บรรทัด 1 ใน <module> TypeError: pprint () หายไป 1 อาร์กิวเมนต์ตำแหน่งที่ต้องการ: 'object' >>>
Forever Learner

5

ในขณะที่การสร้างสคริปต์เริ่มต้นที่กำหนดเองเช่นravenac95 แนะนำเป็นคำตอบทั่วไปที่ดีที่สุดสำหรับกรณีส่วนใหญ่ แต่จะไม่ทำงานในสถานการณ์ที่คุณต้องการใช้ไฟล์from __future__ import X. หากบางครั้งคุณทำงานใน Python 2.x แต่ต้องการใช้การแบ่งที่ทันสมัยมีทางเดียวที่จะทำได้ เมื่อคุณสร้างโปรไฟล์แล้วให้แก้ไขprofile_default(สำหรับ Ubuntu ที่อยู่ใน~/.ipython/profile_default) และเพิ่มสิ่งต่อไปนี้ที่ด้านล่าง:

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

3

เป็นทางเลือกที่ง่ายกว่าสำหรับคำตอบที่ยอมรับบน linux:

เพียงกำหนดนามแฝงเช่นใส่alias pynp='python -i -c"import numpy as np"'ไฟล์ ~ / .bash_aliases ของคุณ จากนั้นคุณสามารถเรียกใช้ python + numpy ด้วยpynpและคุณยังสามารถใช้เพียง python กับpython. พฤติกรรมของสคริปต์ Python ไม่ถูกแตะต้อง


PYTHONSTARTUPถูกเรียกใช้ในโหมดโต้ตอบเท่านั้นดังนั้นพฤติกรรมของสคริปต์ python จึงไม่ถูกแตะต้อง แต่อย่างใด นอกจากนี้ยังสามารถสร้างนามแฝงโดยใช้การอ้างอิงไฟล์:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

คุณสามารถสร้างสคริปต์ python ตามปกติimport_numpy.pyหรืออะไรก็ได้ที่คุณต้องการ

#!/bin/env python3
import numpy as np

จากนั้นเปิดใช้งานด้วย-iธง

python -i import_numpy.py

วิธีนี้จะช่วยให้คุณมีความยืดหยุ่นในการเลือกเฉพาะโมดูลที่คุณต้องการสำหรับโครงการต่างๆ


1

ในฐานะที่เป็นravenac95กล่าวถึงในของเขาคำตอบของคุณทั้งสองสามารถสร้างโปรไฟล์แบบกำหนดเองหรือปรับเปลี่ยนโปรไฟล์เริ่มต้น คำตอบนี้คือมุมมองอย่างรวดเร็วของคำสั่ง Linux ที่จำเป็นในการimport numpy as npทำงานโดยอัตโนมัติ

หากคุณต้องการใช้โปรไฟล์แบบกำหนดเองที่เรียกว่าnumpyให้เรียกใช้:

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

หรือหากคุณต้องการแก้ไขโปรไฟล์เริ่มต้นเพื่อนำเข้า numpy เสมอ:

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

ดูบทช่วยสอนการกำหนดค่าIPythonเพื่ออ่านรายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่าโปรไฟล์ ดู.ipython/profile_default/startup/READMEเพื่อทำความเข้าใจว่าไดเร็กทอรีเริ่มต้นทำงานอย่างไร


1

ipythonคำขอเริ่มต้นของฉันคือ

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

--pylabเป็นipythonตัวเลือกมาระยะหนึ่งแล้ว มันนำเข้าnumpyและ matplotlib(ส่วนของ) ฉันได้เพิ่ม--Inter...ตัวเลือกจึงไม่ใช้นำเข้าตั้งแต่ฉันชอบที่จะใช้อย่างชัดเจน*np....

ซึ่งอาจเป็นทางลัดนามแฝงหรือสคริปต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.