Chạy máy tính xách tay IPython / Jupyter không tương tác


79

Có ai biết nếu có thể chạy một máy tính xách tay IPython / Jupyter không tương tác từ dòng lệnh và có .ipynbtệp kết quả được lưu cùng với kết quả của cuộc chạy. Nếu chưa thể thực hiện được, sẽ khó thực hiện với phantomJS, một thứ gì đó để bật và tắt hạt nhân, và một cái gì đó để bật và tắt máy chủ web?

Để cụ thể hơn, hãy giả sử tôi đã có một sổ ghi chép original.ipynbvà tôi muốn chạy lại tất cả các ô trong sổ ghi chép đó và lưu kết quả vào một sổ ghi chép mới new.ipynb, nhưng thực hiện việc này bằng một lệnh duy nhất trên dòng lệnh mà không yêu cầu tương tác trong trình duyệt hoặc để đóng nhân hoặc máy chủ web và giả sử không có nhân hoặc máy chủ web nào đang chạy.

lệnh ví dụ:

$ ipython notebook run original.ipynb --output=new.ipynb

Câu trả lời:


70

Có, nó có thể, và dễ dàng, nó sẽ (hầu hết) trong lõi IPython cho 2.0, tôi khuyên bạn nên xem xét những ví dụ đó ngay bây giờ.

[biên tập]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb

Nó hiện đã có trong Jupyter NbConvert. NbConvert đi kèm với một loạt các Preprocessors bị tắt theo mặc định, hai trong số đó ( ClearOutputPreprocessorExecutePreprocessor) được quan tâm. Bạn có thể bật chúng trong (các) tệp cấu hình (cục bộ | toàn cầu) của mình thông qua c.<PreprocessorName>.enabled=True(Chữ hoa là python) hoặc trên dòng lệnh với việc --ExecutePreprocessor.enabled=Truegiữ phần còn lại của lệnh như bình thường.

Có bí danh --ExecutePreprocessor.enabled=Truetiện lợi --executecó thể được sử dụng trên phiên bản NbConvert gần đây. Nó có thể được kết hợp với --inplacenếu muốn

Ví dụ: chuyển đổi sang html sau khi chạy máy tính xách tay không đầu:

$ jupyter nbconvert --to=html --execute RunMe.ipynb

chuyển đổi sang PDF sau khi loại bỏ kết quả đầu ra

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

Điều này (tất nhiên) hoạt động với các hạt nhân không phải python bằng cách tạo ra một <insert-your-language-here>hạt nhân, nếu bạn đặt --profile=<your fav profile>. Quá trình chuyển đổi có thể thực sự lâu nếu nó cần để chạy lại sổ ghi chép. Bạn có thể thực hiện chuyển đổi sổ ghi chép sang sổ ghi chép với --to=notebooktùy chọn này.

Có nhiều tùy chọn khác (thời gian chờ, lỗi cho phép, ...) có thể cần được đặt / không đặt tùy thuộc vào trường hợp sử dụng. Xem tài liệu và tất nhiên jupyter nbconvert --help, --help-allhoặc nbconvert tài liệu trực tuyến để biết thêm thông tin.


1
Cảm ơn bạn đã chỉ cho tôi đi đúng hướng. Kể từ khi mã chính xác không được đăng, tôi chia hai một trong những GIST và mã gia tăng đầu ra sao cho những điều sau đây sẽ chạy một máy tính xách tay từ dòng lệnh giống như một mong muốn $ ipnbdocttest.py original.ipynb new.ipynb gist.github.com/davidshinn/6110231
davidshinn

3
Không, không có trong IPython 2, đang trên đường cho IPython 3
Matt

7
Nó có vẻ như đây là bây giờ (ipython 3.1.0): ipython nbconvert --to=html --execute RunMe.ipynb
patricksurry

5
@NoahR Hãy thử tham --ExecutePreprocessor.timeout=-1 khảo
Lenna

5
Các jupyter mới nhất (4.1.0) thực sự cho phép để chạy máy tính xách tay không tương tác jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynbcó thể là câu trả lời có thể được chỉnh sửa
mgalardini

20

Cho đến khi chức năng này trở thành một phần cốt lõi, tôi đã tập hợp một ứng dụng dòng lệnh nhỏ thực hiện những gì bạn muốn. Nó được gọi là runipy và bạn có thể cài đặt nó với pip install runipy. Các nguồn và tập tin readme đang trên github .


runipy dường như không hoạt động quá tốt đối với tôi: nó không cập nhật signaturetrường và do đó (tôi nghĩ đó là một hệ quả), không có SVG nào của tôi thực sự được hiển thị: IPython thích hiển thị __repr__kết xuất văn bản thuần túy thay thế .
akim

1

Chạy và thay thế tệp .ipunb gốc:

jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb

1

Để bao gồm một số tính năng như công nhân song song, tham số đầu vào, gửi e-mail hoặc đầu vào / đầu ra S3 ... bạn có thể cài đặt jupyter-runner

pip install jupyter-runner

Readme trên github: https://github.com/omar-masmoudi/jupyter-runner


-5

Bạn chỉ có thể chạy iPython-Notebook-server thông qua dòng lệnh:

ipython notebook --pylab inline

Thao tác này sẽ khởi động máy chủ ở chế độ không tương tác và tất cả đầu ra được in bên dưới mã. Sau đó, bạn có thể lưu .ipynb-File bao gồm Mã & Đầu ra.


Cảm ơn bạn đã phản hồi, tuy nhiên, tôi đang tìm kiếm một giải pháp cụ thể hơn mà không cần can thiệp vào trình duyệt web cũng như đóng hạt nhân và máy chủ web. Tôi đã chỉnh sửa câu hỏi để cụ thể hơn.
davidshinn

Trong trường hợp này, tôi không biết phải tiến hành như thế nào. Bạn có định làm điều này một cách thường xuyên không? IPython-Notebook được thiết kế để sử dụng tương tác trong trình duyệt và việc lưu các tập tin ipynb cụ thể từ dòng lệnh có vẻ khá kỳ lạ đối với tôi.
ala

Có, tôi dự định làm điều này rất thường xuyên, nếu nó có sẵn. Nó sẽ rất hữu ích trong trường hợp nguồn dữ liệu thay đổi thường xuyên và tôi muốn xem kết quả chẩn đoán từ việc sử dụng gấu trúc xen kẽ với mã mà nó tạo ra, chính xác những gì ipython notebook làm rất tốt. Tuy nhiên, nếu tôi có nhiều loại quy trình này phải chạy một ngày, sẽ tốt hơn nếu chúng có thể được chạy hàng loạt và sau đó tôi có thể xem kết quả sau đó, như thể các tệp nhật ký đã được tạo. Vấn đề với ghi nhật ký tiêu chuẩn là khó thấy mã và đầu ra xen kẽ với nhau.
davidshinn

4
Đây dường như là một trường hợp sử dụng hữu ích đáng kinh ngạc đối với tôi. Bạn có thể lấy một sổ ghi chép mẫu, tham số hóa nó một chút và sau đó nhận được giải pháp thực thi đầy đủ có thể in được mà không cần chạm vào trình duyệt.
holdenweb
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.