আমি * .ipynb ফাইলগুলিকে সত্যের উত্স হিসাবে ব্যবহার করার চেষ্টা করছি এবং কর্মসূচী অনুসারে কর্মসূচী / কর্মের জন্য .py ফাইলগুলিতে তাদের 'সংকলন' করছি।
এটি করার একমাত্র উপায় জিইউআইয়ের মাধ্যমে। কমান্ড লাইনের মাধ্যমে এটি করার কোনও উপায় আছে?
আমি * .ipynb ফাইলগুলিকে সত্যের উত্স হিসাবে ব্যবহার করার চেষ্টা করছি এবং কর্মসূচী অনুসারে কর্মসূচী / কর্মের জন্য .py ফাইলগুলিতে তাদের 'সংকলন' করছি।
এটি করার একমাত্র উপায় জিইউআইয়ের মাধ্যমে। কমান্ড লাইনের মাধ্যমে এটি করার কোনও উপায় আছে?
উত্তর:
আপনি যখন প্রতি বার সাশ্রয় করেন তখন পাইথন স্ক্রিপ্ট আউটপুট দিতে না চাইলে বা আপনি আইপিথন কার্নেলটি পুনরায় আরম্ভ করতে চান না:
উপর কমান্ড লাইন , আপনি ব্যবহার করতে পারেন nbconvert
:
$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
একটি হ্যাক একটি বিট হিসাবে, আপনি এমনকি উপরোক্ত কমান্ডের কল করতে পারেন মধ্যে একটি IPython নোটবুক প্রাক মুলতুবী দ্বারা !
(যে কোন কমান্ড লাইন আর্গুমেন্ট জন্য ব্যবহৃত হয়)। একটি নোটবুকের ভিতরে:
!jupyter nbconvert --to script config_template.ipynb
আগে --to script
ছিল এখনো যোগ করেনি , বিকল্প ছিল --to python
বা --to=python
, কিন্তু এটা ছিল নতুন নামকরণ একটি ভাষা অ্যাগনোস্টিক নোটবুক সিস্টেম দিকে অগ্রসর হবে।
jupyter
আপনি nbconvert
প্রাক বা পোস্ট-সেভ হুকের মাধ্যমে ট্রিগার করতে পারেন : ContentsManager.pre_save_hook
abd FileContentsManager.post_save_hook
। আপনি একটি পোস্ট-সেভ হুক যুক্ত করবেনjupyter nbconvert --to script [notebook]
jupyter nbconvert --to script /path/to/notebooks/*.ipynb
# In[ ]:
স্ক্রিপ্টে টাইপ স্টাফ না চাই তবে আমি এটি পরিষ্কার হতে চাই। এটা করার কোন উপায় আছে?
আপনি যদি *.ipynb
বর্তমান ডিরেক্টরি থেকে সমস্ত ফাইল পাইথন স্ক্রিপ্টে রূপান্তর করতে চান তবে আপনি কমান্ডটি এভাবে চালাতে পারেন:
jupyter nbconvert --to script *.ipynb
আইপিথন ব্যবহার না করে ভি 3 বা ভি 4 আইপিনব থেকে কোডটি বের করার জন্য এখানে একটি দ্রুত এবং নোংরা উপায়। এটি কোষের প্রকারগুলি ইত্যাদি পরীক্ষা করে না
import sys,json
f = open(sys.argv[1], 'r') #input.ipynb
j = json.load(f)
of = open(sys.argv[2], 'w') #output.py
if j["nbformat"] >=4:
for i,cell in enumerate(j["cells"]):
of.write("#cell "+str(i)+"\n")
for line in cell["source"]:
of.write(line)
of.write('\n\n')
else:
for i,cell in enumerate(j["worksheets"][0]["cells"]):
of.write("#cell "+str(i)+"\n")
for line in cell["input"]:
of.write(line)
of.write('\n\n')
of.close()
newlines='\n'
ওপেন আউটপুট ফাইল কলটিতে তৃতীয় যুক্তি হিসাবে যুক্ত করুন । (পাইথন 3.x)
পূর্ববর্তী উদাহরণ অনুসরণ করে তবে নতুন এনবিফর্ম্যাট লাইব সংস্করণ সহ :
import nbformat
from nbconvert import PythonExporter
def convertNotebook(notebookPath, modulePath):
with open(notebookPath) as fh:
nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT)
exporter = PythonExporter()
source, meta = exporter.from_notebook_node(nb)
with open(modulePath, 'w+') as fh:
fh.writelines(source.encode('utf-8'))
আপনি আইপিথন এপিআই থেকে এটি করতে পারেন।
from IPython.nbformat import current as nbformat
from IPython.nbconvert import PythonExporter
filepath = 'path/to/my_notebook.ipynb'
export_path = 'path/to/my_notebook.py'
with open(filepath) as fh:
nb = nbformat.reads_json(fh.read())
exporter = PythonExporter()
# source is a tuple of python source code
# meta contains metadata
source, meta = exporter.from_notebook_node(nb)
with open(export_path, 'w+') as fh:
fh.writelines(source)
Jupytext যেমন রূপান্তর জন্য আপনার সরঞ্জামচেনে রাখা ভাল। এটি কেবল একটি নোটবুক থেকে কোনও স্ক্রিপ্টে রূপান্তর করতে দেয় না, আপনি আবার স্ক্রিপ্ট থেকে নোটবুকেও ফিরে যেতে পারেন। এমনকি সেই নোটবুকটি সম্পাদিত আকারে উত্পাদিত হয়।
jupytext --to py notebook.ipynb # convert notebook.ipynb to a .py file
jupytext --to notebook notebook.py # convert notebook.py to an .ipynb file with no outputs
jupytext --to notebook --execute notebook.py # convert notebook.py to an .ipynb file and run it
বর্তমান ডিরেক্টরিতে থাকা সমস্ত * .ipynb ফর্ম্যাট ফাইলগুলিকে পুনরাবৃত্তভাবে পাইথন স্ক্রিপ্টগুলিতে রূপান্তর করার জন্য:
for i in *.ipynb **/*.ipynb; do
echo "$i"
jupyter nbconvert "$i" "$i"
done
--to script
যুক্তি জুপিটার 4.4.0 মধ্যে ডিফল্ট HTML আউটপুট এড়ানো।
আমি এই সমস্যাটি পেয়েছি এবং অনলাইনে সমাধানটি সন্ধান করার চেষ্টা করেছি। যদিও আমি কিছু সমাধান পেয়েছি, তবুও তাদের কিছু সমস্যা রয়েছে, উদাহরণস্বরূপ, Untitled.txt
আপনি যখন ড্যাশবোর্ড থেকে একটি নতুন নোটবুক শুরু করেন তখন বিরক্তিকর স্বয়ংক্রিয় তৈরি creation
সুতরাং শেষ পর্যন্ত আমি আমার নিজস্ব সমাধান লিখেছি :
import io
import os
import re
from nbconvert.exporters.script import ScriptExporter
from notebook.utils import to_api_path
def script_post_save(model, os_path, contents_manager, **kwargs):
"""Save a copy of notebook to the corresponding language source script.
For example, when you save a `foo.ipynb` file, a corresponding `foo.py`
python script will also be saved in the same directory.
However, existing config files I found online (including the one written in
the official documentation), will also create an `Untitile.txt` file when
you create a new notebook, even if you have not pressed the "save" button.
This is annoying because we usually will rename the notebook with a more
meaningful name later, and now we have to rename the generated script file,
too!
Therefore we make a change here to filter out the newly created notebooks
by checking their names. For a notebook which has not been given a name,
i.e., its name is `Untitled.*`, the corresponding source script will not be
saved. Note that the behavior also applies even if you manually save an
"Untitled" notebook. The rationale is that we usually do not want to save
scripts with the useless "Untitled" names.
"""
# only process for notebooks
if model["type"] != "notebook":
return
script_exporter = ScriptExporter(parent=contents_manager)
base, __ = os.path.splitext(os_path)
# do nothing if the notebook name ends with `Untitled[0-9]*`
regex = re.compile(r"Untitled[0-9]*$")
if regex.search(base):
return
script, resources = script_exporter.from_filename(os_path)
script_fname = base + resources.get('output_extension', '.txt')
log = contents_manager.log
log.info("Saving script at /%s",
to_api_path(script_fname, contents_manager.root_dir))
with io.open(script_fname, "w", encoding="utf-8") as f:
f.write(script)
c.FileContentsManager.post_save_hook = script_post_save
এই স্ক্রিপ্টটি ব্যবহার করতে, আপনি এটিতে যুক্ত করতে পারেন ~/.jupyter/jupyter_notebook_config.py
:)
নোট করুন যে এটি কাজ করার জন্য আপনাকে জপিটার নোটবুক / ল্যাব পুনরায় চালু করতে হতে পারে।
Nb_dev নামে একটি খুব সুন্দর প্যাকেজ রয়েছে যা জুপিটার নোটবুকগুলিতে পাইথন প্যাকেজ লেখার জন্য ডিজাইন করা হয়েছে। ভালো লেগেছে nbconvert,
এটি একটি .py ফাইলে একটি নোটবুক চালু করতে পারেন, কিন্তু এটা নমনীয় ও শক্তিশালী কারণ এটি চমৎকার অতিরিক্ত রচনার অনেক বিষয়ে সাহায্য পেতে পরীক্ষার, ডকুমেন্টেশন বিকাশ, এবং PyPI প্যাকেজগুলিতে রেজিস্টার বৈশিষ্ট্য আছে। এটি ফাস্ট.এই লোকেরা দ্বারা তৈরি করা হয়েছিল।
এটিতে কিছুটা শেখার বক্ররেখা রয়েছে, তবে ডকুমেন্টেশনটি ভাল এবং সামগ্রিকভাবে এটি কঠিন নয়।
input
কীগুলি পুনরাবৃত্তি করা উচিত যেখানেcell_type
'কোড' সমান হয়। এই স্কিমটি