version control - সংস্করণ নিয়ন্ত্রণ অধীনে আইপিথন নোটবুক ব্যবহার করে




version-control ipython (12)

সংস্করণ নিয়ন্ত্রণ অধীনে আইপিথন নোটবুক রাখার জন্য একটি ভাল কৌশল কি?

নোটবুক বিন্যাসটি সংস্করণ নিয়ন্ত্রণের জন্য বেশ কার্যকর: যদি কেউ সংস্করণটি নোটবুক এবং আউটপুটগুলিকে নিয়ন্ত্রণ করতে চায় তবে এটি বেশ ভাল কাজ করে। বিরক্তিকর আসে যখন কেউ শুধুমাত্র সংস্করণটি ইনপুট নিয়ন্ত্রণ করতে চায়, সেল আউটপুটগুলিকে বাদ দিয়ে (উ। "বিল্ড পণ্য") যা বড় বাইনারি ব্লোবগুলি হতে পারে, বিশেষ করে চলচ্চিত্র এবং প্লটগুলির জন্য। বিশেষ করে, আমি একটি ভাল কার্যপ্রবাহ খুঁজে বের করার চেষ্টা করছি যে:

  • আমাকে অন্তর্ভুক্ত বা আউটপুট বাদ দিয়ে নির্বাচন করতে পারবেন,
  • যদি আমি এটি চাই না তবে আউটপুট আউটপুট থেকে আমাকে বাধা দেয়,
  • আমাকে আমার স্থানীয় সংস্করণ আউটপুট রাখতে পারবেন,
  • যখন আমি আমার সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করে ইনপুটগুলিতে পরিবর্তন করে দেখি (অর্থাত আমি যদি শুধুমাত্র সংস্করণটি নিয়ন্ত্রণ করি তবে আমার স্থানীয় ফাইলটি আউটপুটগুলি নিয়ন্ত্রণ করে তবে আমি দেখতে চাই যে ইনপুটগুলি পরিবর্তিত হয়েছে কিনা (এটি একটি কমিটির প্রয়োজন )। স্থানীয় ফাইলের আউটপুটগুলির পরে সংস্করণ নিয়ন্ত্রণ স্থিতি কমান্ড ব্যবহার করে সর্বদা একটি পার্থক্য নিবন্ধন করবে।)
  • আমাকে একটি আপডেটকৃত পরিচ্ছন্ন নোটবুক থেকে আমার কাজ নোটবুক (যা আউটপুট রয়েছে) আপডেট করতে দেয়। (হালনাগাদ)

যেমন উল্লেখ করা হয়েছে, আমি যদি আউটপুট অন্তর্ভুক্ত করতে পছন্দ করি (উদাহরণস্বরূপ nbviewer ব্যবহার করে যা পছন্দযোগ্য ), তাহলে সবকিছু ঠিক আছে। আমি সংস্করণ আউটপুট নিয়ন্ত্রণ করতে চান না সমস্যা হয়। নোটবুকের আউটপুটটি বিচ্ছিন্ন করার জন্য কিছু সরঞ্জাম এবং স্ক্রিপ্ট রয়েছে, কিন্তু প্রায়শই আমি নিম্নলিখিত সমস্যাগুলি সম্মুখীন হয়:

  1. আমি আপাতত আউটপুট সঙ্গে একটি সংস্করণ কমিট, যার ফলে আমার সংগ্রহস্থল দূষণ।
  2. আমি সংস্করণ নিয়ন্ত্রণ ব্যবহার করতে আউটপুট সাফ করি, তবে প্রকৃতপক্ষে আমার স্থানীয় কপি আউটপুট রাখব (কখনও কখনও এটি উদাহরণস্বরূপ পুনরুত্পাদন করার জন্য কিছু সময় নেয়)।
  3. আউটপুট ফালা আউটপুট কিছু স্ক্রিপ্টটি Cell/All Output/Clear মেনু বিকল্পের তুলনায় সামান্য বিন্যাস পরিবর্তন করে, যার ফলে ডিফেসে অবাঞ্ছিত শব্দ তৈরি হয়। এই উত্তর কিছু দ্বারা সমাধান করা হয়।
  4. ফাইলটির একটি পরিচ্ছন্ন সংস্করণে পরিবর্তনগুলি টেনে আনলে, আমার সবকিছু পুনর্নবীকরণ না করেই আমার কাজের নোটবুকে সেই পরিবর্তনগুলিকে অন্তর্ভুক্ত করার উপায় খুঁজে বের করতে হবে। (হালনাগাদ)

আমি কয়েকটি বিকল্প বিবেচনা করেছি যা আমি নীচের আলোচনা করব, তবে এখনও পর্যন্ত একটি ভাল সমাধান খুঁজে বের করতে হবে। একটি সম্পূর্ণ সমাধান আইপ্যাথন কিছু পরিবর্তন প্রয়োজন হতে পারে, অথবা কিছু সহজ বহিরাগত স্ক্রিপ্ট উপর নির্ভর করতে পারে। আমি বর্তমানে mercurial ব্যবহার, কিন্তু একটি সমাধান চাই যে গিট সঙ্গে কাজ করে: একটি আদর্শ সমাধান সংস্করণ নিয়ন্ত্রণ অজ্ঞাতবাদী হবে।

এই সমস্যাটি অনেকবার আলোচনা করা হয়েছে, তবে ব্যবহারকারীর দৃষ্টিকোণ থেকে কোনও নির্দিষ্ট বা স্বচ্ছ সমাধান নেই। এই প্রশ্নের উত্তর নিশ্চিত কৌশল প্রদান করা উচিত। আইপ্যাথনের একটি সাম্প্রতিক (এমনকি উন্নয়ন) সংস্করণ বা সহজে ইনস্টল হওয়া এক্সটেনশনটির প্রয়োজন হলে এটি ভাল।

আপডেট: আমি আমার পরিবর্তিত নোটবুক সংস্করণের সাথে খেলছি যা বিকল্পভাবে গ্রেগরি .clean পরামর্শগুলি ব্যবহার করে প্রতিটি সংরক্ষণের সাথে একটি। সংস্করণ সংরক্ষণ করে। এটি আমার বেশিরভাগ সীমাবদ্ধতাগুলিকে সন্তুষ্ট করে তবে নিম্নলিখিত সমাধানগুলি ছেড়ে দেয়:

  1. এটি এখনও একটি আদর্শ সমাধান নয় (আইপিথন উৎসের একটি পরিবর্তনের প্রয়োজন। কোনও সহজ এক্সটেনশন সহ এই আচরণটি অর্জনের একটি উপায় আছে? কিছু ধরণের অন-সংরক্ষণ হুক প্রয়োজন।
  2. বর্তমান কার্যপ্রবাহের সাথে আমার একটি সমস্যা পরিবর্তন টানছে। এই .clean ফাইল আসতে হবে, এবং তারপর আমার কাজ সংস্করণে একরকম সংহত করা প্রয়োজন। (অবশ্যই, আমি সর্বদা নোটবুকটি পুনরায় চালু করতে পারি, কিন্তু এটি একটি ব্যথা হতে পারে, বিশেষ করে যদি কিছু ফলাফল দীর্ঘ গণনা, সমান্তরাল কম্পিউটেশন ইত্যাদি উপর নির্ভর করে) আমার এখনও এটি সমাধান করার বিষয়ে কোনও ভাল ধারণা নেই । সম্ভবত ipycache মত একটি এক্সটেনশন জড়িত একটি ওয়ার্কফ্লো কাজ হতে পারে, কিন্তু যে একটু জটিল মনে হয়।

নোট

অপসারণ (stripping) আউটপুট

  • নোটবুক চলমান হলে, Cell/All Output/Clear অপসারণের জন্য Cell/All Output/Clear মেনু বিকল্পটি ব্যবহার করতে পারেন।
  • আউটপুট অপসারণের জন্য কিছু স্ক্রিপ্ট রয়েছে, যেমন স্ক্রিপ্ট nbstripout.py যা আউটপুট অপসারণ করে, কিন্তু নোটবুক ইন্টারফেস ব্যবহার করে একই আউটপুট তৈরি করে না। এটি অবশেষে ipython/nbconvert repo ipython/nbconvert অন্তর্ভুক্ত করা হয়েছিল, তবে এই পরিবর্তনগুলি এখন ipython/ipython অন্তর্ভুক্ত করা হয়েছে বলে উল্লেখ করা হয়েছে, তবে সংশ্লিষ্ট কার্যকারিতা এখনো অন্তর্ভুক্ত করা হয়নি বলে মনে হচ্ছে। (আপডেট) বলা হচ্ছে যে, গ্রেগরি ক্রসওয়েট এর সমাধানটি দেখায় যে এটি ipython/nbconvert ছাড়াও সহজ কাজ করা সহজ, তাই এই পদ্ধতিটি সম্ভবত সঠিকভাবে সংযুক্ত থাকলে এটি কার্যকর হতে পারে। (প্রতিটি সংস্করণ নিয়ন্ত্রণ পদ্ধতিতে এটি সংযুক্ত করা হলেও, , একটি ভাল ধারণা মত মনে হচ্ছে না - এই একরকম নোটবুক প্রক্রিয়া হুক করা উচিত।)

নিউজগ্রুপ

সমস্যা

অনুরোধ টানুন


(2017-02)

কৌশল

  • on_commit ():
    • আউটপুট স্ট্রিপ> name.ipynb ( nbstripout ,)
    • আউটপুটটি ফালা করুন> name.clean.ipynb ( nbstripout ,)
    • সর্বদা nbconvert python: name.ipynb.py ( nbconvert )
    • সর্বদা মার্কডাউন রূপান্তর করুন: name.ipynb.md ( nbconvert , ipymd )
  • vcs.configure ():
    • গিট difftool, mergetool: nbdiff এবং nbdmerge থেকে nbdime

সরঞ্জাম

  • nbstripout : একটি নোটবুক থেকে আউটপুট ফালা
  • ipynb_output_filter : একটি নোটবুক থেকে আউটপুট ফালা
  • ipymd : {Jupyter, Markdown, O'Reilly ipymd , ওপেনডকুমেন্ট, .py} এর মধ্যে রূপান্তর করুন
  • nbdime : " nbdime নোটবুক nbdime এবং মার্জ করার জন্য সরঞ্জাম।" (2015)
    • src: https://github.com/jupyter/nbdime
    • ডক্সস: http://nbdime.readthedocs.io/
      • nbdiff : টার্মিনাল বান্ধব ভাবে নোটবুক তুলনা করুন
      • nbmerge : স্বয়ংক্রিয় দ্বন্দ্ব রেজল্যুশন সহ নোটবুকের তিন-উপায় মার্জ
        • nbdime nbmerge একটি গিট মার্জ টুল হিসাবে কাজ করে
      • nbdiff-web : আপনাকে নোটবুকের সমৃদ্ধ nbdiff-web দেখায়
      • nbmerge-web : আপনাকে নোটবুকগুলির জন্য একটি ওয়েব-ভিত্তিক তিন-উপায় মার্জ টুল দেয়
      • nbshow : একটি টার্মিনাল বান্ধব ভাবে একটি একক নোটবুক উপস্থাপন

আমাদের একটি সহযোগী প্রকল্প রয়েছে যেখানে পণ্যটি জুপিটার নোটবুক রয়েছে এবং আমরা গত ছয় মাসের জন্য একটি পদ্ধতি ব্যবহার করেছি যা দুর্দান্ত কাজ করছে: আমরা স্বয়ংক্রিয়ভাবে .ipynb ফাইলগুলি সংরক্ষণ করতে এবং উভয় .ipynb ফাইল এবং .ipynb ফাইলগুলি ট্র্যাক করতে সক্রিয় করি।

যেভাবে কেউ সর্বশেষ নোটবই দেখতে / ডাউনলোড করতে চায় তবে তারা গীথুব বা nbviewer এর মাধ্যমে এটি করতে পারে, এবং কেউ যদি নোটবুক কোডটি কিভাবে পরিবর্তিত হয় তা দেখতে চায় তবে তারা কেবল .py ফাইলগুলিতে পরিবর্তনগুলি দেখতে পারে।

Jupyter নোটবুক সার্ভারের জন্য , এই লাইন যোগ করে সম্পন্ন করা যেতে পারে

import os
from subprocess import check_call

def post_save(model, os_path, contents_manager):
    """post-save hook for converting notebooks to .py scripts"""
    if model['type'] != 'notebook':
        return # only do this for notebooks
    d, fname = os.path.split(os_path)
    check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)

c.FileContentsManager.post_save_hook = post_save

jupyter_notebook_config.py ফাইলে এবং নোটবুক সার্ভারটি পুনরায় চালু করা।

আপনি যদি আপনার jupyter_notebook_config.py ফাইলটি কোন ডিরেক্টরির মধ্যে নিশ্চিত না হন তবে আপনি jupyter --config-dir টাইপ করতে পারেন এবং যদি ফাইলটি খুঁজে না পান তবে আপনি jupyter notebook --generate-config

Ipython 3 নোটবুক সার্ভারের জন্য , এই লাইন যোগ করে সম্পন্ন করা যেতে পারে

import os
from subprocess import check_call

def post_save(model, os_path, contents_manager):
    """post-save hook for converting notebooks to .py scripts"""
    if model['type'] != 'notebook':
        return # only do this for notebooks
    d, fname = os.path.split(os_path)
    check_call(['ipython', 'nbconvert', '--to', 'script', fname], cwd=d)

c.FileContentsManager.post_save_hook = post_save

ipython_notebook_config.py ফাইলে এবং নোটবুক সার্ভারটি পুনরায় চালু করা। এই লাইনগুলি একটি জিতুব সমস্যাগুলির থেকে এসেছে @ মিনিরক প্রদান করেছে এবং @ dror এগুলি তাদের SO উত্তরগুলিতেও অন্তর্ভুক্ত রয়েছে।

Ipython 2 নোটবুক সার্ভারগুলির জন্য , সার্ভারটি ব্যবহার করে এটি সম্পন্ন করা যেতে পারে:

ipython notebook --script

অথবা লাইন যোগ করে

c.FileNotebookManager.save_script = True

ipython_notebook_config.py ফাইলে এবং নোটবুক সার্ভারটি পুনরায় চালু করা।

আপনার ipython_notebook_config.py ফাইলটি কোন ডিরেক্টরির মধ্যে নিশ্চিত না হলে, আপনি ipython locate profile default করতে টাইপ করতে পারেন এবং যদি ফাইলটি খুঁজে না পান তবে আপনি ipython profile create করে এটি তৈরি করতে পারেন।

এখানে এই পদ্ধতিটি ব্যবহার করা যে গীথব আমাদের প্রকল্প : এবং এখানে একটি নোটবুক সাম্প্রতিক পরিবর্তন অন্বেষণ একটি Github উদাহরণ

আমরা এই সঙ্গে খুব খুশি হয়েছে।


আমি অ্যালবার্ট এবং রিচ যা করেছি - সংস্করণটি .ipynb ফাইলগুলি করবেন না (এইগুলিতে চিত্রগুলি থাকতে পারে, যা নোংরা পায়)। পরিবর্তে, সর্বদা ipython notebook --script চালান বা c.FileNotebookManager.save_script = True আপনার কনফিগারেশন ফাইলে রাখুন, যাতে আপনার নোটবুকটি সংরক্ষণ করার সময় একটি (সংস্করণযোগ্য) .py ফাইল সর্বদা তৈরি হয়।

নোটবুকগুলি পুনরুত্পাদন করতে (একটি রেপো চেক করার পরে বা শাখাটি স্যুইচ করার পরে) আমি আমার নোটবুকগুলি সংরক্ষণ করি যেখানে আমি ডিরেক্টরির মধ্যে py_file_to_notebooks.py স্ক্রিপ্ট py_file_to_notebooks.py

এখন, একটি রেপো পরীক্ষা করার পরে, ipynb ফাইলগুলি জেনারেট করতে python py_file_to_notebooks.py চালান। শাখা স্যুইচ করার পরে, আপনি বিদ্যমান ipynb ফাইলগুলি ওভাররাইট করতে python py_file_to_notebooks.py -ov চালাতে হতে পারে।

শুধু নিরাপদ দিকে থাকা, এটি আপনার .gitignore ফাইল *.ipynb যোগ করা ভাল।

সম্পাদনা করুন: আমি আর এটি করি না কারণ (A) আপনি যখন কোনও শাখা চেক আউট করার সময় আপনার নোটবুকগুলিকে পুনঃ ফাইল থেকে পুনঃ উত্পাদন করতে হবে এবং (B) আপনার হারিয়ে যাওয়া নোটবুকগুলিতে মার্কডাউন মত অন্যান্য উপাদান রয়েছে। আমি পরিবর্তে একটি গিট ফিল্টার ব্যবহার করে নোটবুক থেকে আউটপুট ফালা। এই কাজ কিভাবে nbstripout.py


আমি এই সমস্যা সমাধান যে পাইথন প্যাকেজ তৈরি করেছি

https://github.com/brookisme/gitnb

এটি আপনার গিট রেপোর ভিতরে ট্র্যাক / আপডেট / ডিফ্ট নোটবুকগুলির জন্য একটি গিট-অনুপ্রাণিত সিনট্যাক্স সহ একটি CLI সরবরাহ করে।

Heres একটি উদাহরণ

# add a notebook to be tracked
gitnb add SomeNotebook.ipynb

# check the changes before commiting
gitnb diff SomeNotebook.ipynb

# commit your changes (to your git repo)
gitnb commit -am "I fixed a bug"

উল্লেখ্য, শেষ ধাপে, আমি "gitnb commit" ব্যবহার করছি যেখানে আপনার জিট রেপোতে জমা দেওয়া হচ্ছে। এর মূলত জন্য একটি মোড়ানো

# get the latest changes from your python notebooks
gitnb update

# commit your changes ** this time with the native git commit **
git commit -am "I fixed a bug"

আরও অনেক পদ্ধতি রয়েছে, এবং কনফিগার করা যেতে পারে যাতে এটি প্রতিটি পর্যায়ে কম বা কম ব্যবহারকারী ইনপুট প্রয়োজন তবে সাধারণ ধারণাটি।


এখানে আইপিথন 3.0 এর জন্য সিলিল রোসেন্টের একটি নতুন সমাধান রয়েছে যা জ্যাসন-ভিত্তিক আইপ্যামেড ফাইলগুলির পরিবর্তে ফাইলগুলিকে চিহ্নিত করার জন্য অবিরত:

https://github.com/rossant/ipymd


এখানে গিট সঙ্গে আমার সমাধান। এটি আপনাকে স্বাভাবিক হিসাবে কেবল যুক্ত এবং প্রেরণ করতে দেয় (এবং diff): সে ক্রিয়াকলাপগুলি আপনার কার্যকরী গাছকে পরিবর্তন করবে না এবং একই সময়ে (নোটবুক) চালানোর সময় আপনার গিট ইতিহাস পরিবর্তন করবে না।

যদিও এটি সম্ভবত অন্যান্য VCS- এর সাথে মানিয়ে নেওয়া যেতে পারে তবে আমি জানি এটি আপনার প্রয়োজনীয়তাগুলি পূরণ করে না (অন্তত VSC অ্যাগনস্টিকটি)। তা সত্ত্বেও, এটি আমার জন্য উপযুক্ত এবং যদিও এটি বিশেষত উজ্জ্বল কিছু না, এবং বেশিরভাগ লোকেরা সম্ভবত এটি ইতিমধ্যেই ব্যবহার করে থাকে, তবে প্রায়শই গুগলের মাধ্যমে এটি প্রয়োগ করা সম্পর্কে আমার কোনও পরিষ্কার নির্দেশনা পাওয়া যায় নি। তাই এটি অন্যান্য মানুষের জন্য দরকারী হতে পারে।

  1. কোথাও এই কন্টেন্ট দিয়ে একটি ফাইল সংরক্ষণ করুন (নীচের জন্য, আমাদের অনুমান করা যাক ~/bin/ipynb_output_filter.py )
  2. এটি এক্সিকিউটেবল করুন ( chmod +x ~/bin/ipynb_output_filter.py )
  3. নিম্নোক্ত সামগ্রী সহ ~/.gitattributes ফাইলটি তৈরি করুন

    *.ipynb    filter=dropoutput_ipynb
    
  4. নিম্নলিখিত কমান্ড চালান:

    git config --global core.attributesfile ~/.gitattributes
    git config --global filter.dropoutput_ipynb.clean ~/bin/ipynb_output_filter.py
    git config --global filter.dropoutput_ipynb.smudge cat
    

সম্পন্ন!

সীমাবদ্ধতা:

  • এটা শুধুমাত্র জিট সঙ্গে কাজ করে
  • somebranch মধ্যে, আপনি শাখা somebranch এবং আপনি git checkout otherbranch; git checkout somebranch git checkout otherbranch; git checkout somebranch , আপনি সাধারণত কাজ গাছ অপরিবর্তিত হতে আশা করি। এখানে পরিবর্তে আপনি নোটবুকগুলির আউটপুট এবং কোষের সংখ্যায়ন হারাবেন যার উৎস দুটি শাখাগুলির মধ্যে পৃথক।
  • সাধারণভাবে, গ্রেগরির সমাধান সহ, আউটপুটটি সব সময়ে সংস্করণ করা হয় না। চেকআউটের সাথে জড়িত কিছু করার সময় এটি নিক্ষেপ করার জন্য, পদ্ধতিটি পৃথক ফাইলগুলিতে সংরক্ষণ করে পরিবর্তিত হতে পারে (তবে উপরের কোডটি চালানো হয় তখন লক্ষ্য করুন যে, আইডি কোডটি জানা নেই!), এবং সম্ভবত তাদের সংস্করণ (তবে লক্ষ্য করুন এটি একটি git commit notebook_file.ipynb চেয়ে আরও কিছু প্রয়োজন হবে, যদিও এটি অন্তত বেস 64 আবর্জনা থেকে git diff notebook_file.ipynb রাখা হবে)।
  • যে বলেন, ঘটনাক্রমে যদি আপনি পুল কোড (অর্থাৎ অন্য কেউ এই পদ্ধতি ব্যবহার না করে অঙ্গীকারবদ্ধ) যা কিছু আউটপুট রয়েছে, আউটপুট সাধারণত চেক আউট হয়। শুধুমাত্র স্থানীয়ভাবে উত্পাদিত আউটপুট হারিয়ে গেছে।

আমার সমাধানটি আসলে আমি জেনারেট করা জিনিসগুলিকে সংস্করণে রাখতে পছন্দ করি না - এটি লক্ষ্য করে যে আউটপুট জড়িত ম্যালেজগুলি আউটপুট বা আপনার উত্পাদনশীলতা বা উভয়কে অকার্যকর করার নিশ্চয়তা দেয়।

সম্পাদনা করুন:

  • যদি আপনি সমাধানটি গ্রহণ করেন তবে আমি এটি প্রস্তাব করেছি - অর্থাৎ, বিশ্বব্যাপী - আপনি যদি কিছু গিট রেপো সংস্করণ আউটপুট করতে চান তবে আপনার সমস্যা হবে। সুতরাং যদি আপনি একটি নির্দিষ্ট গিট রিপোজিটরির জন্য আউটপুট ফিল্টারিং নিষ্ক্রিয় করতে চান তবে কেবল এটির ভিতরে একটি ফাইল তৈরি করুন। গিগিট / তথ্য / গুণাবলী

    **। ipynb ফিল্টার =

কন্টেন্ট হিসাবে। স্পষ্টত, একইভাবে বিপরীত কাজ করা সম্ভব: শুধুমাত্র একটি নির্দিষ্ট সংগ্রহস্থলের জন্য ফিল্টারিং সক্ষম করুন।

  • কোড এখন তার নিজস্ব গিট repo রক্ষণাবেক্ষণ করা হয়

  • যদি উপরের নির্দেশাবলী ImportErrors এ ফলাফল করে তবে স্ক্রিপ্টের পথের আগে "ipython" যোগ করার চেষ্টা করুন:

    git config --global filter.dropoutput_ipynb.clean ipython ~/bin/ipynb_output_filter.py
    

সম্পাদন করুন : মে 2016 (আপডেট ফেব্রুয়ারী 2017): আমার স্ক্রিপ্টে অনেকগুলি বিকল্প রয়েছে - সম্পূর্ণতার জন্য, এখানে যারা আমি জানি তাদের একটি তালিকা রয়েছে: nbstripout ( other variants ), nbstrip , jq


পিটারো ব্যাটিস্টনের চমৎকার স্ক্রিপ্টটি অনুসরণ করতে, যদি আপনি এই রকম একটি ইউনিকোড প্যারিসিং ত্রুটি পান তবে:

Traceback (most recent call last):
  File "/Users/kwisatz/bin/ipynb_output_filter.py", line 33, in <module>
write(json_in, sys.stdout, NO_CONVERT)
  File "/Users/kwisatz/anaconda/lib/python2.7/site-packages/IPython/nbformat/__init__.py", line 161, in write
fp.write(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2014' in position 11549: ordinal not in range(128)

আপনি স্ক্রিপ্টের শুরুতে যুক্ত করতে পারেন:

reload(sys)
sys.setdefaultencoding('utf8')

প্রায় digging পরে, আমি অবশেষে Jupyter ডক্স এ এই অপেক্ষাকৃত সহজ প্রাক সংরক্ষণ হুক পাওয়া। এটা সেল আউটপুট তথ্য আঁকা। আপনাকে jupyter_notebook_config.py ফাইলে এটি পেস্ট করতে হবে (নির্দেশাবলীর জন্য নীচে দেখুন)।

def scrub_output_pre_save(model, **kwargs):
    """scrub output before saving notebooks"""
    # only run on notebooks
    if model['type'] != 'notebook':
        return
    # only run on nbformat v4
    if model['content']['nbformat'] != 4:
        return

    for cell in model['content']['cells']:
        if cell['cell_type'] != 'code':
            continue
        cell['outputs'] = []
        cell['execution_count'] = None
        # Added by binaryfunt:
        if 'collapsed' in cell['metadata']:
            cell['metadata'].pop('collapsed', 0)

c.FileContentsManager.pre_save_hook = scrub_output_pre_save

ধনী সংকেত এর উত্তর থেকে :

আপনি যদি আপনার jupyter_notebook_config.py ফাইলটি কোন ডিরেক্টরির মধ্যে নিশ্চিত না হন তবে আপনি jupyter_notebook_config.py jupyter --config-dir [কমান্ড প্রম্পট / টার্মিনালে] টাইপ করতে পারেন এবং যদি ফাইলটি খুঁজে না পান তবে আপনি এটি তৈরি করতে পারেন টাইপ jupyter notebook --generate-config


হিসাবে নির্দেশিত, --script 3.x মধ্যে 3.x । এই পদ্ধতির একটি পোস্ট-সংরক্ষণ-হুক প্রয়োগ করে ব্যবহার করা যেতে পারে। বিশেষ করে, ipython_notebook_config.py এ নিম্নলিখিত যোগ করুন:

import os
from subprocess import check_call

def post_save(model, os_path, contents_manager):
    """post-save hook for converting notebooks to .py scripts"""
    if model['type'] != 'notebook':
        return # only do this for notebooks
    d, fname = os.path.split(os_path)
    check_call(['ipython', 'nbconvert', '--to', 'script', fname], cwd=d)

c.FileContentsManager.post_save_hook = post_save

কোড # 8009 থেকে নেওয়া হয়।


আমি অবশেষে একসাথে জুপিটার এবং গিট একসঙ্গে খেলা করতে একটি উত্পাদনশীল এবং সহজ উপায় খুঁজে পাওয়া যায় নি। আমি এখনও প্রথম ধাপে আছি, কিন্তু আমি ইতিমধ্যে মনে করি এটি অন্য সব সংকীর্ণ সমাধানগুলির চেয়ে অনেক ভাল।

ভিসুয়াল স্টুডিও কোড মাইক্রোসফ্ট থেকে একটি শীতল ও ওপেন সোর্স কোড সম্পাদক। এটি একটি চমৎকার পাইথন এক্সটেনশান যা এখন আপনাকে একটি Jupyter নোটবুকটি পাইথন কোড হিসাবে আমদানি করতে দেয়।

একটি পাইথন ফাইলে আপনার নোটবুক আমদানি করার পরে, সমস্ত কোড এবং মার্কডাউন একটি সাধারণ পাইথন ফাইলে একসাথে থাকবে, মন্তব্যগুলিতে বিশেষ চিহ্নিতকারীর সাথে। আপনি নীচের ছবিতে দেখতে পারেন:

আপনার পাইথন ফাইলটিতে কেবল নোটবুক ইনপুট কক্ষগুলির সামগ্রী রয়েছে। আউটপুট একটি বিভক্ত উইন্ডোতে উত্পন্ন করা হবে। আপনার নোটবইতে বিশুদ্ধ কোড আছে, এটি ঠিক করার সময় এটি পরিবর্তন হয় না। আপনার কোড সঙ্গে কোন mingled আউটপুট। আপনার diffs বিশ্লেষণ কোন অদ্ভুত Json অজ্ঞান বিন্যাস।

শুধু বিশুদ্ধ Python কোড যেখানে আপনি সহজে প্রতি একক diff সনাক্ত করতে পারেন।

আমি এমনকি আমার .ipynb ফাইল সংস্করণ প্রয়োজন হবে না। আমি একটি *.ipynb লাইন। .gitignore মধ্যে .gitignore

কাউকে প্রকাশ বা শেয়ার করার জন্য নোটবুক তৈরি করতে হবে? কোন সমস্যা নেই, শুধুমাত্র ইন্টারেক্টিভ পাইথন উইন্ডোতে রপ্তানি বোতামে ক্লিক করুন

আমি শুধু একটি দিনের জন্য এটি ব্যবহার করা হয়েছে, কিন্তু অবশেষে আমি happily Git সঙ্গে Jupyter ব্যবহার করতে পারেন।

PS: VSCode কোড সমাপ্তি Jupyter তুলনায় অনেক ভাল।


২019 সালের খুব জনপ্রিয় জনপ্রিয়তার তুলনায় ২013 সালের খুব জনপ্রিয় উপায়গুলির তুলনায় অসঙ্গতিপূর্ণ হ্যাকগুলি হ'ল।

বেশ কয়েকটি বিকল্প বিদ্যমান, প্রশ্নের উত্তরে সেরাটি জুপাইটেক্সট।

https://github.com/mwouts/jupytext

Jupytext উপর তথ্য বিজ্ঞান নিবন্ধের দিকে ধরা

সংস্করণ নিয়ন্ত্রণের সাথে এটি যেভাবে কাজ করে তা আপনি উভয় সংস্করণ নিয়ন্ত্রণে .py এবং .ipynb ফাইলগুলি রাখেন। আপনি যদি ইনপুট diff চান তবে .py এ দেখুন, যদি আপনি সর্বশেষ rendered আউটপুট চান তাহলে .ipynb দিকে দেখুন।

উল্লেখযোগ্য উল্লেখ: ভিএস স্টুডিও, এন বিconvert, nbdime, হাইড্রোজেন

আমার মনে হয় একটু বেশি কাজ করে, ভিএস স্টুডিও এবং / অথবা হাইড্রোজেন (বা অনুরূপ) এই কার্যপ্রবাহের সমাধানগুলির মধ্যে প্রভাবশালী খেলোয়াড় হয়ে উঠবে।


ঠিক আছে, তাই এটি nbstripout.py আলোচনার মত বর্তমান সর্বোত্তম সমাধান বলে মনে হচ্ছে, আইপিনব ফাইলগুলি থেকে স্বয়ংক্রিয়ভাবে আউটপুট ফাঁকা করার জন্য একটি গিট ফিল্টার তৈরি করতে হয়।

আমি এটি কাজ করার জন্য কি করেছি এখানে (যে আলোচনা থেকে কপি):

যখন আপনি সর্বশেষ আইপিথন আমদানি করতে পারবেন না তখন আমি cfriedline এর nbstripout ফাইলটিকে সামান্য তথ্য দেওয়ার জন্য সামান্য পরিবর্তন করেছি: https://github.com/petered/plato/blob/fb2f4e252f50c79768920d0e47b870a8d799e92b/notebooks/config/strip_notebook_output এবং এটি আমার রেপোতে যোগ করা হয়েছে বল./relative/path/to/strip_notebook_output

এছাড়াও ফাইল যোগ। Repot র root মূলত ফাইল ফাইল, ধারণকারী:

*.ipynb filter=stripoutput

এবং একটি setup_git_filters.shধারণকারী গঠিত

git config filter.stripoutput.clean "$(git rev-parse --show-toplevel)/relative/path/to/strip_notebook_output" 
git config filter.stripoutput.smudge cat
git config filter.stripoutput.required true

এবং দৌড়ে source setup_git_filters.sh। Fancy $ (git rev-parse ...) জিনিসটি কোনও (ইউনিক্স) মেশিনে আপনার রেপোর স্থানীয় পথ খুঁজে পেতে হয়।







jupyter-notebook