Tự động nhập các mô-đun khi nhập trình thông dịch python hoặc ipython


119

Tôi thấy mình phải gõ import numpy as npgần như mọi lúc tôi khởi động trình thông dịch python. Làm cách nào để thiết lập trình thông dịch python hoặc ipython để numpy được nhập tự động?

Câu trả lời:


70

Sử dụng biến môi trường PYTHONSTARTUP . Từ tài liệu chính thức:

Nếu đây là tên của một tệp có thể đọc được, các lệnh Python trong tệp đó sẽ được thực thi trước khi lời nhắc đầu tiên được hiển thị trong chế độ tương tác. Tệp được thực thi trong cùng một không gian tên nơi các lệnh tương tác được thực thi để các đối tượng được xác định hoặc nhập vào đó có thể được sử dụng mà không cần đủ điều kiện trong phiên tương tác.

Vì vậy, chỉ cần tạo một tập lệnh python với câu lệnh nhập và trỏ biến môi trường đến nó. Tuy nhiên, hãy nhớ rằng 'Rõ ràng luôn tốt hơn là ngầm hiểu', vì vậy đừng dựa vào hành vi này cho các kịch bản sản xuất.

Đối với Ipython, hãy xem hướng dẫn này về cách tạo tệp ipython_config


@mklauber, cảm ơn, nhưng giải pháp được chấp nhận ở đó không được dùng nữa. Tuy nhiên, nó đã truyền cảm hứng cho việc chỉnh sửa của tôi. @ OP: Xem câu trả lời đã chỉnh sửa của tôi
Dhara

3
@ user545424 kể từ khi viết bài này (ipython 1.1.0) cũng hỗ trợ PYTHONSTARTUP.
pflaquerre

Thiết lập env PYTHONSTARTUP="~/.startup.py"không làm việc cho tôi
Seanny123

Chỉ cần một lưu ý export PYTHONSTARTUP=~/.python_shell_startup.pyđể đặt biến.
PallavBakshi

77

Đối với ipython, có hai cách để đạt được điều này. Cả hai đều liên quan đến thư mục cấu hình của ipython được đặt trong đó ~/.ipython.

  1. Tạo một hồ sơ ipython tùy chỉnh.
  2. Hoặc bạn có thể thêm tệp khởi động vào ~/.ipython/profile_default/startup/

Để đơn giản, tôi sẽ sử dụng tùy chọn 2. Tất cả những gì bạn phải làm là đặt một .pyhoặc .ipytệp vào ~/.ipython/profile_default/startupthư mục và nó sẽ tự động được thực thi. Vì vậy, bạn có thể đơn giản đặt import numpy as npvào một tệp đơn giản và bạn sẽ có np trong không gian tên của dấu nhắc ipython của bạn.

Tùy chọn 2 sẽ thực sự hoạt động với cấu hình tùy chỉnh, nhưng sử dụng cấu hình tùy chỉnh sẽ cho phép bạn thay đổi các yêu cầu khởi động và cấu hình khác dựa trên một trường hợp cụ thể. Tuy nhiên, nếu bạn luôn muốn npcó sẵn cho bạn thì bằng mọi cách hãy đặt nó vào thư mục khởi động.

Để biết thêm thông tin về cấu hình ipython. Tài liệu có một lời giải thích đầy đủ hơn nhiều.


2
Trong Ubuntu 14.04 thư mục thực sự là: ~/.config/ipython/profile_default/startup/và không~/.ipython/profile_default/startup/
Peter

1
Rất tiếc, tùy chọn 2 ở trên không cho phép hoàn thành tab.
user1717828

21

Tôi sử dụng một tệp ~ / .startup.py như thế này:

# 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

Sau đó, xác định PYTHONSTARTUP = ~ / .startup.py và Python sẽ sử dụng nó khi khởi động một trình bao.

Các câu lệnh in ở đó vì vậy khi tôi khởi động trình bao, tôi nhận được lời nhắc rằng nó đang có hiệu lực và những gì đã được nhập. Các ppphím tắt thực sự tiện dụng quá ...


Không hoạt động với tôi trên Linux. Tôi có phải yêu cầu Python tìm trong thư mục chính của tôi hay gì đó không?
Seanny123

oops: quên một bước quan trọng: Tôi đã thêm nó: define PYTHONSTARTUP
Ned Batchelder

Tôi không biết khi nào ~thay thế cho $HOMEhoạt động hay không, nhưng thay vì đường dẫn tương đối này, tôi đã phải sử dụng một đường dẫn tuyệt đối trên MacOS, fish và python3.
rien333

@Ned Batchelder, cảm ơn rất nhiều, đây là những gì tôi đang tìm kiếm. câu hỏi phụ, tôi đang sử dụng cái này trên windows và phím tắt pp không hoạt động. Bạn có thể vui lòng tư vấn? >>> pp <function pprint at 0x0000020DAF90C8C8> >>> pp () Traceback (lần gọi gần đây nhất): File "<stdin>", dòng 1, trong <module> TypeError: pprint () thiếu 1 đối số vị trí được yêu cầu: 'object' >>>
Forever Learner,

5

Mặc dù tạo một tập lệnh khởi động tùy chỉnh như ravenac95 gợi ý là câu trả lời chung tốt nhất cho hầu hết các trường hợp, nhưng nó sẽ không hoạt động trong các trường hợp mà bạn muốn sử dụng a from __future__ import X. Nếu đôi khi bạn làm việc bằng Python 2.x nhưng muốn sử dụng phép chia hiện đại, chỉ có một cách để thực hiện việc này. Khi bạn tạo một hồ sơ, hãy chỉnh sửa profile_default(Đối với Ubuntu, cái này nằm trong ~/.ipython/profile_default) và thêm một cái gì đó như sau vào dưới cùng:

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

3

Như một giải pháp thay thế đơn giản hơn cho câu trả lời được chấp nhận, trên linux:

chỉ cần xác định một bí danh, ví dụ như đặt alias pynp='python -i -c"import numpy as np"'trong tệp ~ / .bash_aliases của bạn. Sau đó, bạn có thể gọi python + numpy với pynpvà bạn vẫn có thể chỉ sử dụng python với python. Hành vi của các tập lệnh Python vẫn được giữ nguyên.


PYTHONSTARTUPchỉ được gọi trên chế độ tương tác , do đó, hành vi của tập lệnh python luôn được giữ nguyên. Một bí danh cũng có thể được tạo bằng tham chiếu tệp:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

Bạn có thể tạo một tập lệnh python bình thường import_numpy.pyhoặc bất kỳ thứ gì bạn thích

#!/bin/env python3
import numpy as np

sau đó khởi chạy nó với -icờ.

python -i import_numpy.py

Cách như thế này sẽ giúp bạn linh hoạt chỉ chọn các mô-đun bạn muốn cho các dự án khác nhau.


1

Như ravenac95 đã đề cập trong câu trả lời của anh ấy , bạn có thể tạo một cấu hình tùy chỉnh hoặc sửa đổi cấu hình mặc định. Câu trả lời này là xem nhanh các lệnh Linux cần thiết để import numpy as nptự động.

Nếu bạn muốn sử dụng cấu hình tùy chỉnh được gọi là numpy, hãy chạy:

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

Hoặc nếu bạn muốn sửa đổi cấu hình mặc định để luôn nhập numpy:

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

Xem hướng dẫn cấu hình IPython để đọc chuyên sâu hơn về cấu hình cấu hình. Xem .ipython/profile_default/startup/READMEđể hiểu cách hoạt động của thư mục khởi động.


1

Lời ipythongọi mặc định của tôi là

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

--pylabđã là một ipythonlựa chọn trong một thời gian. Nó nhập khẩu numpyvà (các bộ phận của) matplotlib. Tôi đã thêm --Inter...tùy chọn để nó không sử dụng *nhập, vì tôi thích sử dụngnp.... .

Đây có thể là một phím tắt, bí danh hoặc tập lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.