Magic% paste của IPython hoạt động như thế nào?


93

Tôi muốn sao chép mã Python đã thụt lề / toàn bộ hàm và lớp vào IPython. Mỗi khi tôi thử, thụt đầu dòng bị vặn và tôi nhận được thông báo lỗi sau:

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.


3
Tôi biết, nó có thể đã có trên stackoverflow, nhưng nó không tìm thấy nó sau 3 lần tìm kiếm, vì vậy tôi đã thêm phiên bản của riêng mình.
Framester

Câu trả lời:


136

Bạn không thể sao chép trực tiếp vào IPython. Đây là các bước:

  1. Sao chép các dòng bạn muốn sao chép vào IPython vào khay nhớ tạm
  2. Tham gia %pastevào IPython
  3. Nhấn nút Enter
  4. Lợi nhuận!

47
% dán đòi hỏi Tkinter mặc dù, vì vậy nếu bạn không có đó khác đặt cược tốt là% cpaste
Yekta

61
Bạn thực sự có thể sao chép mã sang IPython trực tiếp: trước tiên bạn có thể phải tắt tính năng tự động thụt lề bằng cách nhập %autoindent.
Eric O Lebigot

Cảm ơn EOL! +1 cho bạn
Framester,

5
Trong Ipython 5 bạn có thể chỉ cần dán mã. Không cần %pastenữa. Đọc câu trả lời này .
Levon

1
Bạn cũng không cần% trước pasteđó.
wordsforthewise

40

Giải thích rõ về các bước:

  • Đầu tiên, sao chép các dòng mục tiêu vào khay nhớ tạm của bạn.

  • Nhập vào lời nhắc iPython:

    • Nếu trên Tkinter: nhập %paste
    • Nếu không: nhập %cpaste
  • Dán (Ctrl-V) và nhấn enter.

  • Sau đó gõ --và nhấn enter.

Ví dụ:

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:for l in "Hello World":
:    print l,
:--
H e l l o   W o r l d

3
Bạn không cần phải Ctrl-V. Chỉ gõ% dán và nhấn enter.
SeF

21

Kể từ Ipython 5, bạn không cần bất kỳ lệnh ma thuật nào, chỉ cần dán nó

ipython5

Cảm ơn prompt_toolkit, IPythonhiện đã hỗ trợ:

  • Đánh dấu cú pháp khi bạn nhập
  • Chỉnh sửa nhiều dòng thực sự (phím mũi tên lên và xuống di chuyển giữa các dòng)
  • Dán nhiều dòng mà không ngắt dòng thụt vào hoặc thực thi mã ngay lập tức
  • Giao diện hoàn thành mã tốt hơn (chúng tôi dự định cải thiện điều đó nhiều hơn) Hỗ trợ chuột tùy chọn

Thêm về điều này ở đây

Để nâng cấp ipythonlên phiên bản mới nhất

pip install ipython --upgrade 

Có thể dán nhiều dòng và thực thi mã tự động ở mỗi dòng không?
Eric Duminil

có, chỉ cần dán mã và nhấn enter. nếu bạn muốn gỡ lỗi, hãy kiểm tra% pdb hoặc ipdb. ví dụ
Levon

Đây cũng hỗ trợ đầu ra của repl Python, mã mà bắt đầu với ba >dấu hiệu như thế này:>>> a = 1 + 2
Flimm

Tất cả thời gian này tôi đã làm% cpaste .. tốt đẹp!
Gershon Herczeg

1
Tôi nghĩ nó phụ thuộc vào môi trường mà bạn đang thực hiện việc dán và cách bạn thực hiện việc dán? Đồng nghiệp của tôi đang sử dụng dấu nhắc lệnh của Windows 10 để SSH vào máy chủ Linux của chúng tôi, mở ipython trong vùng chứa Docker ở đó và cố gắng dán mã đã được thụt lề (bằng cách nhấp chuột phải ) và anh ta nhận được thêm thụt lề ngay cả trong iPython 7.8.0. Cách tôi hiểu hành vi nhấp chuột phải của dấu nhắc lệnh là nó thực sự chỉ lấy bất cứ thứ gì có trong khay nhớ tạm và xuất ra từng ký tự như thể bạn đang nhập. Vì vậy, iPython không có cách nào để biết bạn đang dán trên thực tế.
Kal

6

%paste yêu cầu Tkinter. Nếu bạn đang sử dụng ubuntu, bạn có thể cài đặt nó bằng cách

sudo apt-get install python-tk

Nếu bạn đang sử dụng Python3

sudo apt-get install python3-tk

Sau đó khởi động lại ipython và sử dụng %pasteđể dán từ khay nhớ tạm của bạn.


1

Một trong những câu trả lời hữu ích đã bị mất trong các bình luận, vì vậy tôi muốn viết lại nó cùng với việc thêm một tài liệu tham khảo cho một chức năng ma thuật IPython hữu ích khác.

Đầu tiên để trình bày lại những gì @EOL đã nói, một cách để giải quyết vấn đề của OP là tắt tính năng tự động thụt lề bằng cách chạy %autoindentvà dán trước (tất nhiên là không cần thiết nếu bạn đang sử dụng %paste).

Bây giờ để bổ sung thêm thông tin cho những gì đã có ở đây, một chế độ hữu ích hơn trong IPython là %doctest_modecho phép bạn sao chép các đoạn mã mẫu và thử nghiệm từ các chuỗi tài liệu. Điều này cũng hữu ích để thực hiện đầu ra phiên python tương tác mà bạn có thể tìm thấy trong tài liệu và diễn đàn trực tuyến mà không cần phải loại bỏ các chuỗi nhắc nhở trước.


1

Đối với người dùng ubuntu đang sử dụng Python 3.

Đối python-tkvới Python 2.

Để làm %pasteviệc trên Python 3, hãy cài đặt python3-tkgói:

sudo apt-get install python3-tk
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.