* .İpynb dosyalarını gerçeğin kaynağı olarak kullanmaya ve programlı olarak programlanmış işler / görevler için .py dosyalarına 'derleme' bakıyorum .
Bunu yapmanın tek yolu GUI. Komut satırı üzerinden yapmanın bir yolu var mı?
* .İpynb dosyalarını gerçeğin kaynağı olarak kullanmaya ve programlı olarak programlanmış işler / görevler için .py dosyalarına 'derleme' bakıyorum .
Bunu yapmanın tek yolu GUI. Komut satırı üzerinden yapmanın bir yolu var mı?
Yanıtlar:
Her kaydettiğinizde bir Python betiği çıkarmak istemiyorsanız veya IPython çekirdeğini yeniden başlatmak istemiyorsanız:
Açık komut satırında şunları kullanabilirsiniz nbconvert
:
$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
Bir hack biraz olarak, hatta yukarıdaki komutu çağırabilir içinde bir ipython notebook öncesi bekleyen tarafından !
(herhangi bir komut satırı argümanı için kullanılır). Bir not defterinin içinde:
!jupyter nbconvert --to script config_template.ipynb
Önce --to script
edildi eklendi , seçenek --to python
ya --to=python
ama oldu değiştirildi bir dil agnostik dizüstü sistemine doğru hareket.
jupyter
tetikleyebileceğiniz nbconvert
: öncesi veya kanca sonrası tasarrufu yoluyla ContentsManager.pre_save_hook
abd FileContentsManager.post_save_hook
. Kaydetme sonrası bir kanca jupyter nbconvert --to script [notebook]
jupyter nbconvert --to script /path/to/notebooks/*.ipynb
# In[ ]:
senaryoda tür şeyler istemiyorsam, temiz olmasını istiyorum. Bunu yapmanın bir yolu var mı?
*.ipynb
Geçerli dizindeki tüm dosyaları python komut dosyasına dönüştürmek istiyorsanız , komutu şu şekilde çalıştırabilirsiniz:
jupyter nbconvert --to script *.ipynb
İşte ipython kullanmadan V3 veya V4 ipynb'den kodu çıkarmanın hızlı ve kirli bir yolu. Hücre tiplerini vb. Kontrol etmez.
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'
, açık çıktı dosyası çağrısına üçüncü bir bağımsız değişken olarak ekleyin . (Python 3.x)
Önceki örneği takip ederek ancak yeni nbformat lib sürümü ile :
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'))
Bunu IPython API'sından yapabilirsiniz.
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 , bu tür dönüşümler için araç zincirinizde olması güzel. Yalnızca bir not defterinden bir komut dosyasına dönüştürmekle kalmaz, aynı zamanda komut dosyasından not defterine de geri dönebilirsiniz. Ve hatta o defter idam formunda üretti.
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
Geçerli dizindeki tüm * .ipynb biçimindeki dosyaları yinelemeli olarak python komut dosyalarına dönüştürmek için:
for i in *.ipynb **/*.ipynb; do
echo "$i"
jupyter nbconvert "$i" "$i"
done
--to script
Jüpiter 4.4.0 varsayılan HTML çıkışı önlemek için argüman eklemek zorunda kaldı .
Bu sorunu yaşadım ve çözümü çevrimiçi bulmaya çalıştım. Bazı çözümler bulmama rağmen, hala bazı sorunlar var, örneğin, Untitled.txt
gösterge tablosundan yeni bir not defteri başlattığınızda sinir bozucu otomatik oluşturma.
Sonunda kendi çözümümü yazdım :
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
Bu komut dosyasını kullanmak için şu komut dosyasına ekleyebilirsiniz ~/.jupyter/jupyter_notebook_config.py
:)
Çalışması için jupyter dizüstü bilgisayarı / laboratuvarı yeniden başlatmanız gerekebileceğini unutmayın.
Jupyter Notebook'larda Python paketleri yazmak için tasarlanmış nb_dev adında çok güzel bir paket var . Gibi nbconvert,
bir .py dosyası içine bir defteri açabilirsiniz, ama güzel ilave yazma bir sürü testler, dokümantasyon geliştirmelerine yardımcı ve PyPI üzerinde paketleri kayıt özelliklerine sahiptir çünkü daha esnek ve güçlüdür. Fast.ai millet tarafından geliştirilmiştir.
Biraz öğrenme eğrisi var, ancak dokümantasyon iyi ve genel olarak zor değil.
input
anahtarları yinelemelisinizcell_type
. Bu şemaya