সংস্করণ নিয়ন্ত্রণে আইপিথন নোটবুক ব্যবহার করা


569

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

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

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

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

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

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

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

আপডেট করুন: আমি বাজানো হয়েছে আমার মডিফাই করা নোটবুক সংস্করণ ঐচ্ছিকভাবে একটি সংরক্ষণ .cleanব্যবহার করে সংরক্ষণ করুন যে সঙ্গে সংস্করণ গ্রেগরি Crosswhite এর পরামর্শ । এটি আমার বেশিরভাগ সীমাবদ্ধাকে সন্তুষ্ট করে তবে নীচের সমাধান না করে:

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

মন্তব্য

আউটপুট সরানো (স্ট্রিপিং)

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

নিউজগ্রুপ

সমস্যা

অনুরোধ টানুন


Github.com/ipython/ipython এ সমস্যা হিসাবে যুক্ত হওয়া বা একটি টান অনুরোধ জমা দেওয়ার জন্য দুর্দান্ত জিনিস বলে মনে হচ্ছে যা আপনাকে এই লক্ষ্যকে আরও এগিয়ে নিতে সহায়তা করে।
কাইল কেলি

4
আউটপুট সরানোর জন্য একবার যদি আপনার একটি কার্যনির্বাহী স্ক্রিপ্ট আসে, আপনি কমিট করার আগে স্বয়ংক্রিয়ভাবে এটি প্রয়োগ করতে একটি গিট "ক্লিন" ফিল্টার ব্যবহার করতে পারেন (পরিষ্কার / স্মুড ফিল্টার দেখুন)।
ম্যাথিয়াস

1
@ ফুবার্বিকিউ প্রশ্নটিতে অসন্তুষ্টিজনক কাজের পরিমাণ রয়েছে: প্রত্যেকের কমপক্ষে একটি সীমাবদ্ধতা রয়েছে। এখন যেহেতু পিআর 4175 একত্রিত হয়েছে, সম্ভবত একটি সম্পূর্ণ সমাধান সম্ভবত প্রস্তুত করা যেতে পারে, তবে এটি এখনও করা দরকার। আমার কিছুটা সময় হওয়ার সাথে সাথে, অন্য কেউ এর মধ্যে সন্তোষজনক সমাধান না দিলে আমি এটি (উত্তর হিসাবে) করব।
mforbes

1
@ সরোলে আমি এখনও কোনও প্রস্তাবিত সমাধান খুঁজে পাইনি: আমি --scriptবিকল্পটি নিয়ে যাচ্ছিলাম , তবে তা সরিয়ে দেওয়া হয়েছে। পোস্ট-সেভ হুক বাস্তবায়িত না হওয়া পর্যন্ত আমি অপেক্ষা করছি ( যা পরিকল্পনা করা হয়েছে ) যে মুহুর্তে আমি মনে করি যে আমি বেশ কয়েকটি কৌশল সমন্বিত একটি গ্রহণযোগ্য সমাধান দিতে সক্ষম হব।
mforbes

1
@ এমফোর্বস দেখে মনে হচ্ছে যে PR আপনার মন্তব্য করার কয়েক দিন পরে মিশে গেছে। আপনি বা আমার চেয়ে বেশি জ্ঞানী কেউ এখানে একটি উত্তর পোস্ট করতে পারেন যা দেখায় যে নতুন বৈশিষ্ট্যটি কীভাবে ব্যবহার করতে হয়?
কোবে জোন

উত্তর:


124

গিট সহ আমার সমাধান এখানে। এটি আপনাকে যথারীতি কেবল যুক্ত (এবং পৃথক) করার অনুমতি দেয়: এই ক্রিয়াকলাপগুলি আপনার কার্যকারী বৃক্ষকে পরিবর্তন করবে না এবং একই সাথে (পুনরায়) একটি নোটবুক চালানো আপনার গিটের ইতিহাসকে পরিবর্তন করবে না।

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

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

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

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

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

    **। আইপিনব ফিল্টার =

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

  • কোডটি এখন তার নিজস্ব গিট রেপোতে রক্ষণাবেক্ষণ করা হচ্ছে

  • যদি উপরের নির্দেশাবলী আমদানি ত্রুটির ফলাফল হয় তবে স্ক্রিপ্টের পথের আগে "আইপথন" যুক্ত করার চেষ্টা করুন:

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

সম্পাদনা : মে 2016 (ফেব্রুয়ারী 2017 আপডেট হয়েছে): আমার স্ক্রিপ্টের বেশ কয়েকটি বিকল্প রয়েছে - সম্পূর্ণতার জন্য, আমি যাদের জানি তাদের একটি তালিকা এখানে দেওয়া হয়েছে: এনবিস্ট্রাইপআউট ( অন্যান্য রূপগুলি ), এনবিস্ট্রিপ , জকিউ


2
আপনি যে পরিবর্তনগুলি টানছেন তা অন্তর্ভুক্ত করার বিষয়টি আপনি কীভাবে মোকাবেলা করবেন? আপনি কি কেবলমাত্র সমস্ত আউটপুট পুনরায় তৈরি করার সাথে বেঁচে আছেন? (আমি মনে করি এটি আপনার দ্বিতীয় সীমাবদ্ধতার বহিঃপ্রকাশ
for

1
@ জারমেস: এই বর্ধিত সংস্করণটি ঠিক হওয়া উচিত
পিট্রো ব্যাটিস্টন

1
বাহ্যিক ডিফ সরঞ্জাম দ্বারা এই গিট ফিল্টার পদ্ধতি ব্যবহার করার কোনও উপায় আছে কি? আমি যদি সাধারণ কমান্ড লাইন সরঞ্জামটি ব্যবহার করি তবে ফিল্টারটি প্রয়োগ করা হয় তবে আমি যদি ডিফল্ট সরঞ্জাম হিসাবে মেল্ড ব্যবহার করি না। stackoverflow.com/q/30329615/578770
এফএ

1
পেয়ে এড়াতে ImportErrorআমি উপরোক্ত দ্বিতীয় ipython ব্যবহার চালানোর জন্য ছিলgit config --global filter.dropoutput_ipynb.clean ipython ~/bin/ipynb_output_filter.py
chris838

1
আউসোম সলিউশন পিয়েট্রো, ধন্যবাদ :) আমার ক্ষেত্রে আপনার স্ক্রিপ্টটি ব্যবহার করার সময় আমি 2 টি জিনিস পরিবর্তন করেছি: 1) আমি রেপোর গোড়ায় .gitattributes এ ফিল্টার ঘোষণাকে পছন্দ করেছি ~/.gitattributes, অন্য লোকের মতো আমারও 2 ফিল্টার রয়েছে ) আমি workdir/**/*.ipynb filter=dropoutput_ipynbরেজিএক্সকে সংজ্ঞায়িত করেছি এবং আমি আমার নোটবুকগুলি বেশিরভাগ ওয়ার্কডিরের মধ্যে রেখেছি </ => যদি আমি এখনও আউটপুট দিয়ে একটি নোটবুক ঠেলাঠেলি করতে চাই এবং গিথুবগুলিতে বুকমার্কযোগ্য রেন্ডারিং উপভোগ করতে চাই, আমি কেবল এটি ফোল্ডারের বাইরে রেখেছি।
Svend

63

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

যদি কেউ গিথুব বা এনবিউউয়ারের মাধ্যমে এটি করতে পারে তবে সর্বশেষ নোটবুকটি দেখতে বা ডাউনলোড করতে চায় এবং কেউ যদি নোটবুকের কোডটি কীভাবে পরিবর্তিত হয়েছে তা দেখতে চাইলে তারা কেবল .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ফাইল এবং নোটবুক সার্ভার পুনর্সূচনা হচ্ছে। এই লাইনগুলি গিথুব ইস্যুগুলির উত্তরগুলি যা @ মিআরঙ্ক সরবরাহিত রয়েছে এবং @ ডার্ক এগুলি তার এসও উত্তরে অন্তর্ভুক্ত করে।

জন্য 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 আমাদের প্রকল্পের : এবং এখানে একটি ব্যাপার একটি নোটবুক সাম্প্রতিক পরিবর্তনগুলি অন্বেষণ এর GitHub উদাহরণ

আমরা এটি দিয়ে খুব খুশি হয়েছি।


1
ব্যবহার প্রমাণিত হয়েছে যে যুক্ত প্রমাণের জন্য ধন্যবাদ --script। এটির সাথে সমস্যাটি হ'ল চিত্রগুলি রাখা থাকলে আসল নোটবুকগুলি বিশাল। এই উপায়ে একটি আদর্শ সমাধান সম্ভবত সর্বশেষতম সম্পূর্ণ নোটবুকের উপর নজর রাখতে গিট-এনেক্সের মতো কিছু ব্যবহার করতে পারে ।
mforbes

আইপাইথন ৩.x এ হ্রাস --scriptকরা হয়েছে। ipython.org/ipython-doc/3/whatsnew/version3.html
Dror

ধন্যবাদ @ ডার্ক, আপনি এখানে যেমন সরবরাহ করেছেন তেমন আমি মিনক্রের আইপথন ৩.x সমাধান সরবরাহ করতে আমার উত্তর আপডেট করেছি।
ধনী সিগনেল

10
আপডেট: আইপ্যাথন থেকে জুপিটারের "দ্য বিগ স্প্লিট" এর কারণে এই সমাধানটি আইপথন সংস্করণ 4-এ ভাঙা হয়েছে। সংস্করণ 4 এ এই সমাধানটি সামঞ্জস্য jupyter notebook --generate-configকরতে, একটি কনফিগার ফাইল তৈরি করতে কমান্ডটি ব্যবহার করুন। কমান্ডটি jupyter --config-dirজানায় যে কোন ডিরেক্টরিটিতে কনফিগার ফাইল রয়েছে। এবং @ রিচের দেওয়া কোড স্নিপেট নামের ফাইলটিতে যুক্ত করা উচিত jupyter_notebook_config.py। বাকিরা আগের মতো কাজ করে।
মোবিয়াস

2
@ মোবিয়াসডাম্পলিংয়ের দ্বারা পয়েন্টটি ছাড়াও এর check_call(['ipython'সাথে প্রতিস্থাপন করুন check_call(['jupyter', অন্যথায় আপনি একটি সতর্কতা পাবেন যা অবনতিযুক্ত ipython nbconvertএবং এর jupyter nbconvertপরিবর্তে আপনার ব্যবহার করা উচিত । (বৃহস্পতি v4.1.0, আইপাইথন v4.1.2)
কটকুলাস

36

আমি MinRKs গিস্টেরnbstripout উপর ভিত্তি করে তৈরি করেছি , যা গিট এবং মার্কুরিয়াল উভয়কে সমর্থন করে (মফোরবেসকে ধন্যবাদ)। এটি কমান্ড লাইনে বা ফিল্টার হিসাবে এককভাবে ব্যবহার করার উদ্দেশ্যে, যা / / এর মাধ্যমে বর্তমান সংগ্রহস্থলে সহজেই (আন) ইনস্টল করা হয় ।nbstripout installnbstripout uninstall

পিপিআই বা সহজভাবে এটি পান

pip install nbstripout

আমি একটি ওয়ার্কফ্লো বিবেচনা করছি যেখানে আমি .ipynb এবং সংশ্লিষ্ট .py উভয় রেখেছি যা উপরে বর্ণিত পোস্ট-সেভ হুক ব্যবহার করে স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল। আমি আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা প্রবণতা লাগাতে চাই - এটি করার জন্য একটি সাধারণ স্ক্রিপ্ট তৈরি করবেন?
Krzysztof Słowiński

1
@ KrzysztofSłowiński না, nbstripoutসহজেই এই ব্যবহারের ক্ষেত্রে সমর্থন করে না কারণ এটি নোটবুকের JSON ফর্ম্যাটের উপর নির্ভর করে। আপনার ব্যবহারের ক্ষেত্রে বিশেষায়িত স্ক্রিপ্টটি লেখার চেয়ে আপনি আরও ভাল।
কিনান

13

আইপিথন ৩.০-এর জন্য সিরিল রসান্টের একটি নতুন সমাধান এখানে দেওয়া হয়েছে, যা জসন-ভিত্তিক আইপিমড ফাইলের চেয়ে মার্কডডাউন ফাইলগুলিতে অবিরত রয়েছে:

https://github.com/rossant/ipymd


জুপিটারকে এখনও সমর্থন করছে না, মনে হচ্ছে।
কে.-মাইকেল আয়ে

আমি সর্বশেষতম জুপিটারের সাথে সফলভাবে আইপিমড ব্যবহার করছি - আপনি কি কোনও নির্দিষ্ট সমস্যা বা ত্রুটি বার্তা পেয়েছেন?
সিরিল রসেন্ট

13

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

জুপিটেক্সট জুপিটার নোটবুককে বিভিন্ন পাঠ্য বিন্যাসে (স্ক্রিপ্টস, মার্কডাউন এবং আর মার্কডাউন) রূপান্তর করতে পারে। এবং বিপরীতে। এটি এই ফর্ম্যাটগুলির মধ্যে একটিতে একটি নোটবুক জোড়া এবং নোটবুকের দুটি উপস্থাপনা (একটি .ipynbএবং একটি .md/.py/.Rফাইল) স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করার বিকল্পও দেয় ।

উপরের প্রশ্নগুলিতে জুপাইটেক্সট কীভাবে উত্তর দেয় তা আমাকে ব্যাখ্যা করতে দাও:

আমাকে আউটপুট সহ বা বাদ দিয়ে নির্বাচন করতে দেয়,

.md/.py/.Rফাইলটি শুধুমাত্র ইনপুট কক্ষ রয়েছে। আপনার সবসময় এই ফাইলটি ট্র্যাক করা উচিত। .ipynbআপনি আউটপুটগুলি ট্র্যাক করতে চাইলে কেবল ফাইলটি সংস্করণ করুন ।

যদি আমি এটি না চান তবে আমাকে দুর্ঘটনাবশত আউটপুট প্রতিপন্ন করা থেকে বিরত রাখে,

যোগ *.ipynbকরুন.gitignore

আমাকে আমার স্থানীয় সংস্করণে আউটপুট রাখতে দেয়,

আউটপুটগুলি (স্থানীয়) .ipynbফাইলে সংরক্ষণ করা হয়

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

.py/.Rবা .mdফাইলের পার্থক্যটি আপনি যা সন্ধান করছেন তা

আমাকে আপডেট ওয়ার্কিং নোটবুক থেকে আমার ওয়ার্কিং নোটবুক (যা আউটপুট ধারণ করে) আপডেট করতে দেয়। (হালনাগাদ)

.py/.Rবা .mdফাইলের সর্বশেষ সংশোধনটি টানুন এবং আপনার নোটবুকটি জুপিটারে রিফ্রেশ করুন (Ctrl + R)। আপনি টেক্সট ফাইল থেকে সর্বশেষতম ইনপুট সেলগুলি পাবেন ফাইল থেকে মিলে যাওয়া আউটপুটগুলির সাথে .ipynb। কার্নেলটি প্রভাবিত হয় না, যার অর্থ আপনার স্থানীয় ভেরিয়েবলগুলি সংরক্ষিত রয়েছে - আপনি যেখানে রেখেছেন সেখানে কাজ চালিয়ে যেতে পারেন।

Jupytext এর সাথে আমি যা পছন্দ করি তা হ'ল নোটবুকটি (কোনও .py/.Rবা .mdফাইলের আকারে ) আপনার প্রিয় আইডিইতে সম্পাদনা করা যেতে পারে। এই পদ্ধতির সাথে একটি নোটবুক রিফ্যাক্টর করা সহজ হয়ে যায়। আপনার কাজ শেষ হয়ে গেলে আপনাকে জিউটারে নোটবুকটি রিফ্রেশ করতে হবে।

আপনি যদি এটি চেষ্টা করে দেখতে চান: জুপিটেক্সট ইনস্টল করুন pip install jupytextএবং আপনার জুপিটার নোটবুক বা ল্যাব সম্পাদক পুনরায় চালু করুন। নোটবুক যে আপনি সংস্করণ নিয়ন্ত্রণ করতে চান খুলুন, এবং এটা পেয়ার একটি Markdown ফাইল (বা স্ক্রিপ্ট) ব্যবহার Jupytext মেনু Jupyter নোটবুক (অথবা Jupytext কমান্ড Jupyter ল্যাব)। আপনার নোটবুকটি সংরক্ষণ করুন, এবং আপনি দুটি ফাইল পাবেন: মূল .ipynb, প্লাস নোটবুকের প্রতিশ্রুত পাঠ্য উপস্থাপনা, এটি সংস্করণ নিয়ন্ত্রণের জন্য উপযুক্ত!

যারা আগ্রহী তাদের জন্য: কমান্ড লাইনে জুপিটেক্সটও উপলভ্য ।


13

আপডেট : এখন আপনি সরাসরি ভিজ্যুয়াল স্টুডিও কোডে জুপিটার নোটবুক ফাইল সম্পাদনা করতে পারেন । আপনি নোটবুক বা রূপান্তরিত অজগর ফাইলটি সম্পাদনা করতে বেছে নিতে পারেন।

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

ভিজ্যুয়াল স্টুডিও কোডটি মাইক্রোসফ্টের একটি দুর্দান্ত এবং ওপেন সোর্স কোড সম্পাদক। এটিতে একটি দুর্দান্ত পাইথন এক্সটেনশান রয়েছে যা আপনাকে পাইথন কোড হিসাবে একটি বৃহত্তর নোটবুকটি আমদানির অনুমতি দেয় । এখন আপনি সরাসরি জুপিটার নোটবুকগুলি সম্পাদনা করতে পারেন ।

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

ভিএসকোড সম্পাদক নোটবুক সহ পাইথনে রূপান্তরিত

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

কেবল খাঁটি পাইথন কোড যেখানে আপনি প্রতিটি একক পৃথককে সহজেই সনাক্ত করতে পারবেন।

এমনকি আমার .ipynbফাইলগুলি এখন আর সংস্করণ করার দরকার নেই। আমি একটি লাগাতে পারেন *.ipynbলাইন .gitignore

কারও সাথে প্রকাশ করতে বা ভাগ করতে একটি নোটবুক তৈরি করা দরকার? কোনও সমস্যা নেই, ইন্টারেক্টিভ পাইথন উইন্ডোতে কেবল এক্সপোর্ট বোতামটি ক্লিক করুন

পাইথন ফাইলটি নোটবুক ফর্ম্যাটে রফতানি করা হচ্ছে

আপনি যদি সরাসরি নোটবুকটি সম্পাদনা করেন তবে এখন একটি আইকন রয়েছে Convert and save to a python scriptভিজ্যুয়াল স্টুডিও কোডে জুপিটার আইকন

এখানে ভিজ্যুয়াল স্টুডিও কোডের ভিতরে একটি নোটবুকের স্ক্রিনশট:

ভিএসকোডের ভিতরে নোটবুক সম্পাদনা করা হচ্ছে

আমি এটি কেবল এক দিনের জন্য ব্যবহার করছি, তবে শেষ পর্যন্ত আমি গিটারের সাথে সুখের সাথে জুপিটারটি ব্যবহার করতে পারি।

PS: ভিএসকোড কোড সমাপ্তি বৃহত্তর থেকে অনেক ভাল is


12

(2017-02)

কৌশল

  • on_commit ():
    • আউটপুট> name.ipynb ( nbstripout,) স্ট্রিপ করুন
    • আউটপুট> name.clean.ipynb ( nbstripout,) স্ট্রিপ করুন
    • সর্বদা nbconvertঅজগর থেকে: name.ipynb.py ( nbconvert)
    • সর্বদা চিহ্নিতকরণে রূপান্তর করুন: name.ipynb.md ( nbconvert, ipymd)
  • vcs.configure ():
    • গিট ডিফ্টল, মার্জেটুল: এনবিডিফ এবং এনবিডিমে থেকে এনব্রিম

সরঞ্জাম

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

11

উপরের খুব জনপ্রিয় 2016 উত্তরগুলি হ'ল 2019 এ করার আরও ভাল পদ্ধতির সাথে তুলনা করে বেমানান হ্যাক।

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

Jupytext

ক্যাচ Jupytext ডেটা বিজ্ঞান দিকে নিবন্ধ

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

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

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


9

কেবল "jupytext" জুড়ে আসুন যা দেখতে একটি নিখুঁত সমাধানের মতো। এটি নোটবুক থেকে একটি .py ফাইল উত্পন্ন করে এবং তারপরে উভয়কে সিঙ্ক করে রাখে। আপনি আউটপুটগুলি না হারিয়ে pyপি ফাইলের মাধ্যমে ইনপুটগুলি সংস্করণ নিয়ন্ত্রণ করতে, ভিন্ন করতে এবং মার্জ করতে পারেন। আপনি নোটবুকটি খুললে এটি ইনপুট সেলগুলির জন্য .py এবং আউটপুট জন্য .ipynb ব্যবহার করে। আপনি যদি আউটপুটটি গিটের সাথে অন্তর্ভুক্ত করতে চান তবে আপনি কেবল আইপিনব যুক্ত করতে পারেন।

https://github.com/mwouts/jupytext


9

যেহেতু নোটবুকগুলির সংস্করণ নিয়ন্ত্রণ পরিচালনা করার জন্য অনেক কৌশল এবং সরঞ্জাম রয়েছে, তাই আমি একটি উপযুক্ত কৌশল বাছাই করার জন্য একটি প্রবাহ চিত্রটি তৈরি করার চেষ্টা করেছি (এপ্রিল 2019 তৈরি হয়েছে)

সংস্করণ নিয়ন্ত্রণ কৌশল বাছাইয়ের সিদ্ধান্ত প্রবাহ


8

হিসাবে নির্দেশিত হিসাবে, মধ্যে --scriptহ্রাস করা হয় 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 থেকে নেওয়া হয়েছে ।


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

1
ধন্যবাদ! --scriptসংস্করণ নিয়ন্ত্রণ নির্বিশেষে আমি এখন আচরণটি পুনরুত্পাদন করতে এই কৌশলটি ব্যবহার করছি । আমার প্রথমে কিছু সমস্যা হয়েছিল, তাই আমি যদি কাউকে কিছুটা সময় বাঁচাতে পারি তবে: 1) যদি ipython_notebook_config.pyপ্রোফাইল ফোল্ডারটি থেকে অনুপস্থিত থাকে তবে ipython profile createএটি তৈরির জন্য চালান । ২) যদি মনে হয় পোস্ট-সেভ-হুকটি উপেক্ষা করা --debugহয়েছে তবে সমস্যাটি সনাক্ত করতে আইপিথন চালান । 3) স্ক্রিপ্ট ত্রুটি সহ ব্যর্থ হলে ImportError: No module named mistune- সহজ minstue ইনস্টল: pip install mistune
জো

7

দুর্ভাগ্যক্রমে, আমি মার্চুরিয়াল সম্পর্কে খুব বেশি জানি না, তবে আমি আপনাকে একটি সম্ভাব্য সমাধান দিতে পারি যা গিটের সাথে কাজ করে, এই আশায় যে আপনি আমার গিট কমান্ডগুলিকে তাদের বুধের সমতুল্যে অনুবাদ করতে সক্ষম হবেন এই আশায়।

পটভূমির জন্য, গিট-এ addকমান্ডটি স্টেজিং এরিয়াতে একটি ফাইলের জন্য করা পরিবর্তনগুলি সংরক্ষণ করে। একবার আপনি এটি সম্পন্ন করার পরে, ফাইলে পরবর্তী যে কোনও পরিবর্তনগুলি গিট দ্বারা উপেক্ষা করা হবে যদি না আপনি এগুলিকে মঞ্চস্থ করতে বলে থাকেন। সুতরাং, নিম্নলিখিত স্ক্রিপ্ট, যা প্রদত্ত প্রতিটি ফাইলের জন্য, সমস্তগুলি সরিয়ে দেয় outputsএবং prompt_number sectionsস্ট্রিপড ফাইলটি স্থির করে এবং তারপরে মূলটি পুনরুদ্ধার করে:

দ্রষ্টব্য: এটি চালানো যদি আপনার মতো ত্রুটি বার্তা পায় তবে স্ক্রিপ্টটি পরিবর্তে চালানোর জন্য ImportError: No module named IPython.nbformatব্যবহার করুন ।ipythonpython

from IPython.nbformat import current
import io
from os import remove, rename
from shutil import copyfile
from subprocess import Popen
from sys import argv

for filename in argv[1:]:
    # Backup the current file
    backup_filename = filename + ".backup"
    copyfile(filename,backup_filename)

    try:
        # Read in the notebook
        with io.open(filename,'r',encoding='utf-8') as f:
            notebook = current.reads(f.read(),format="ipynb")

        # Strip out all of the output and prompt_number sections
        for worksheet in notebook["worksheets"]:
            for cell in worksheet["cells"]:
               cell.outputs = []
               if "prompt_number" in cell:
                    del cell["prompt_number"]

        # Write the stripped file
        with io.open(filename, 'w', encoding='utf-8') as f:
            current.write(notebook,f,format='ipynb')

        # Run git add to stage the non-output changes
        print("git add",filename)
        Popen(["git","add",filename]).wait()

    finally:
        # Restore the original file;  remove is needed in case
        # we are running in windows.
        remove(filename)
        rename(backup_filename,filename)

স্ক্রিপ্ট একবার সেই ফাইলগুলিতে চালিত হয়ে গেছে যার পরিবর্তনগুলি আপনি প্রতিশ্রুতিবদ্ধ করতে চেয়েছিলেন, কেবল চালান git commit


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

6

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

ধারণা

মূলত, -ফায়ালগুলি ট্র্যাক করবেন না.ipnyb , কেবল সংশ্লিষ্ট- .pyফাইলগুলি। অপশনটি দিয়ে নোটবুক-সার্ভার
শুরু করার মাধ্যমে, নোটবুকটি--script সংরক্ষণ করা হলে সেই ফাইলটি স্বয়ংক্রিয়ভাবে তৈরি / সেভ হয়ে যায়।

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

ব্যক্তিগতভাবে আমি ফাইলগুলিকে ভার্সন-ট্র্যাক করার জন্য মার্উরিয়াল ব্যবহার করি .py; এবং এর জন্য সাধারণ (কমান্ড-লাইন) কমান্ডগুলি যুক্ত করতে, চেক-ইন (ect) ব্যবহার করুন। বেশিরভাগ অন্যান্য (ডি) ভিসিএস এটিকে অনুমতি দেবে।

ইতিহাস এখন ট্র্যাক করা সহজ; এটি .pyছোট, পাঠ্য এবং পৃথক থেকে সহজ। একবার এবং কিছুক্ষণ পরে, আমাদের একটি ক্লোন প্রয়োজন (কেবল শাখা; সেখানে একটি দ্বিতীয় নোটবুক-সেভার শুরু করুন), বা একটি পুরানো সংস্করণ (এটি পরীক্ষা করুন এবং একটি নোটবুক-সার্ভারে আমদানি করুন), ইত্যাদি

টিপস ও ট্রিকস

  • যোগ * .ipynb করতে ' .hgignore ', তাই Mercurial জানে ঐ ফাইল উপেক্ষা করতে পারেন
  • সার্ভার শুরু করার জন্য একটি (বাশ) স্ক্রিপ্ট তৈরি করুন ( --scriptবিকল্প সহ) এবং এটির সংস্করণ-ট্র্যাক করুন
  • একটি নোটবুক সংরক্ষণ করা হচ্ছে সংরক্ষণ করে .py-file, কিন্তু আছে না এটা চেক।
    • এটি একটি অসুবিধা : কেউ তা ভুলে যেতে পারে
    • এটির বৈশিষ্ট্যটিও : সংগ্রহশালা-ইতিহাসকে ক্লাস্টার না করে কোনও নোটবুক সংরক্ষণ করা (এবং পরে চালিয়ে নেওয়া) সম্ভব।

শুভেচ্ছা

  • নোটবুক ড্যাশবোর্ডে চেক-ইন / অ্যাড / ইত্যাদির জন্য বোতামগুলি রাখা ভাল হবে
  • (উদাহরণস্বরূপ) একটি চেকআউট file@date+rev.pyসহায়ক হওয়া উচিত এটি যুক্ত করা অনেক বেশি কাজ করা উচিত; এবং সম্ভবত আমি একবার এটি করব। এখন অবধি, আমি কেবল হাতে হাতে এটি করি।

আপনি কীভাবে .pyফাইলটি থেকে কোনও নোটবুকে ফিরে যাবেন ? আমি এই পদ্ধতির পছন্দ করি তবে .ipynb-> .py-> .ipynbসম্ভাব্য ক্ষতির কারণ আমি এটিকে গুরুত্ব সহকারে বিবেচনা করি নি।
মফরবেস

এটি সহজ: উদাহরণস্বরূপ ডি নোটবুক-ড্যাশবোর্ডে ফেলে রেখে লোড করুন। "আউটপুট ডেটা" বাদে কিছুই হারায় না
অ্যালবার্ট

যদি এটি সত্য হয়, তবে আমি মনে করি এটি ধারণার কাছাকাছি হবে তবে আমি মনে করতে পারি যে আইপিথন বিন্যাস থেকে ফর্ম্যাটে রূপান্তর .pyকরার সময় ডেটা সম্পূর্ণরূপে সংরক্ষণের প্রতিশ্রুতিবদ্ধ ছিল না .ipynb। এটি সম্পর্কে একটি সমস্যা আছে - সুতরাং সম্ভবত এটি একটি সম্পূর্ণ সমাধানের ভিত্তি তৈরি করবে।
mforbes

.pyফাইল থেকে ফাইলগুলিতে রূপান্তর করতে আমার কিছুটা সমস্যা হচ্ছে .ipynbnbconvertএখনও এটি সমর্থন করে বলে মনে হচ্ছে না এবং আমি ipython notebookনিজে হাতে চালাচ্ছি বলে আমার কাছে একটি নোটবুক ড্যাশবোর্ড নেই । পিছনের রূপান্তরটি কীভাবে বাস্তবায়ন করা যায় সে সম্পর্কে আপনার কাছে কোনও সাধারণ পরামর্শ আছে?
mforbes

অবশ্যই .py-থেকে-নোটবুক রূপান্তরটি গোল-ভ্রমণের উদ্দেশ্যে নয়। সুতরাং এটি সত্যিই সাধারণ সমাধান হতে পারে না যদিও এটি আপনার পক্ষে কার্যকর এটি দুর্দান্ত।
হোল্ডেনওয়েব

3

পিট্রো ব্যাটিস্টনের দুর্দান্ত স্ক্রিপ্টটি অনুসরণ করতে, আপনি যদি কোনও ইউনিকোড পার্সিং ত্রুটি পেয়ে থাকেন তবে:

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')

3

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

https://github.com/brookisme/gitnb

এটি আপনার গিট রেপুর ভিতরে নোটবুকগুলি ট্র্যাক / আপডেট / পৃথক করতে গিট-অনুপ্রেরণামূলক সিনট্যাক্স সহ একটি সি এল এল সরবরাহ করে provides

হেরসের উদাহরণ

# 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"

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

# 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

চারপাশে খনন করার পরে, অবশেষে জুপিটার ডক্সে আমি এই অপেক্ষাকৃত সহজ প্রাক-সঞ্চয় হুকটি পেয়েছি । এটি সেল আউটপুট ডেটা ফেলা করে। আপনাকে এটি 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

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

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


1
আমি দ্রষ্টব্য করব যে এই সমাধানটি ডিস্কে কোনও আউটপুট সংরক্ষণ করে না এবং সংস্করণ নিয়ন্ত্রণ ইস্যু থেকে কিছুটা স্বতন্ত্র।
বিডিফোর্বস

2

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

নোটবুকগুলি পুনরায় তৈরি করতে (কোনও রেপো পরীক্ষা করার পরে বা একটি শাখা স্যুইচ করার পরে) আমি স্ক্রিপ্টটি py_file_to_notebooks.py রেখেছি আমার নোটবুকগুলি যে ডিরেক্টরিটি সঞ্চয় করি সেখানে ।

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

কেবল নিরাপদ দিকে থাকতে, *.ipynbআপনার যুক্ত করাও ভাল .gitignore ফাইলটিতে

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


আমি এই ধারণাটি পছন্দ করেছি, তবে পরীক্ষার পরে, খুঁজে পেয়েছি যে .pyফাইলগুলি থেকে আবার রূপান্তর .ipynbকরা সমস্যাযুক্ত, বিশেষত সংস্করণ 4 নোটবুকগুলির সাথে যার জন্য এখনও কোনও রূপান্তরকারী নেই। একজনকে বর্তমানে v3 আমদানিকারকটি ব্যবহার করে তারপরে ভি 4 তে রূপান্তর করতে হবে এবং আমি এই জটিল ট্রিপটি সম্পর্কে কিছুটা উদ্বিগ্ন। এছাড়াও, .pyনোটবুকটি মূলত জুলিয়া কোড হলে কোনও ফাইল খুব ভাল পছন্দ নয়! অবশেষে, --scriptহ্রাস করা হয়েছে তাই আমি মনে করি হুকগুলি যাওয়ার উপায়।
mforbes

আপনার লিঙ্কে গিট ফিল্টার সমাধানটি ভাল, আপনার উত্তরটি সেখান থেকে এখানে অনুলিপি করা উচিত :-)
এমকারানস

2

ঠিক আছে, সুতরাং এটি এখানে একটি আলোচনার অনুসারে বর্তমান সেরা সমাধানের মতো দেখাচ্ছে , স্বয়ংক্রিয়ভাবে কমিট উপর ipynb ফাইল থেকে আউটপুট স্ট্রিপ একটি Git ফিল্টার করা হয়।

এটি কাজ করতে আমি যা করেছি তা এখানে (সেই আলোচনা থেকে অনুলিপি করা):

আপনি সর্বশেষ আইপিথন আমদানি করতে না পারলে তথ্যমূলক ত্রুটি দিতে আমি সিফ্রিডলাইনের এনবিস্ট্রপআউট ফাইলটি কিছুটা সংশোধন করেছি: https://github.com/petered/plato/blob/fb2f4e252f50c79768920d0e47b870a8d799e92b/notebooks/config_stout_note আমার রেপো এটি যোগ দেয় বলুন./relative/path/to/strip_notebook_output

রেপোর মূলটিতে ফাইলটি .gitattributes ফাইল যুক্ত করেছে:

*.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। অভিনব $ (গিট রেভ-পার্স ...) জিনিসটি হ'ল যে কোনও (ইউনিক্স) মেশিনে আপনার রেপোর স্থানীয় পথ খুঁজে পাওয়া।


1

এই জুপিটার এক্সটেনশনটি ব্যবহারকারীদেরকে জিপিটার নোটবুকগুলি সরাসরি গিথুবে ঠেলাতে সক্ষম করে।

এখানে দেখুন

https://github.com/sat28/githubcommit


আপনি কি ব্যাখ্যা করতে পারেন এটি কি করে? ডুমেন্টেশন বিশেষভাবে পরিষ্কার নয়।
অ্যালেক্স মনরাস

@ অ্যালেক্সমনরাস এটি সরাসরি জুপিটার নোটবুকের একটি বোতাম যুক্ত করবে যেখানে আপনি নিজের গিটহাব রেপোতে নোটবুকগুলি প্রতিশ্রুতিবদ্ধ বার্তার সাহায্যে ঠেলাতে পারবেন
বসে

1

এটি এপ্রিল -2020 এবং জুপিটার নোটবুক সংস্করণ নিয়ন্ত্রণের জন্য প্রচুর কৌশল এবং সরঞ্জাম রয়েছে। আপনি যে সমস্ত সরঞ্জাম ব্যবহার করতে পারেন তার একটি দ্রুত ওভারভিউ এখানে দেওয়া হয়েছে,

  • এনবিডিমে - স্থানীয় বিবিধকরণ এবং নোটবুকগুলি মার্জ করার জন্য দুর্দান্ত

  • এনবিস্ট্রিপআউট - প্রতিটি কমিটের আগে নোটবুক আউটপুট স্বয়ংক্রিয়ভাবে সরিয়ে ফেলার জন্য একটি গিট ফিল্টার

  • jupytext - প্রতিটি নোটবুকের সাথে সিপি'এপি সহকারী ফাইল রাখে। আপনি কেবল .py ফাইলগুলি প্রতিশ্রুতিবদ্ধ

  • এনবি কনভার্ট - নোটবুকগুলিকে একটি অজগর স্ক্রিপ্ট বা এইচটিএমএল (অথবা উভয়) রূপান্তর করুন এবং এই বিকল্প ফাইল প্রকারের প্রতিশ্রুতিবদ্ধ

  • রিভিউএনবি - গিটহাবের কোনও কমিট বা টান অনুরোধের জন্য নোটবুক পৃথক (আউটপুট সহ) দেখায়। পরিবর্তনগুলি (নীচের স্ক্রিনশট) আলোচনা করতে নোটবুকের কক্ষে মন্তব্য লিখতেও পারেন।

এখানে চিত্র বর্ণনা লিখুন

দাবি অস্বীকার: আমি রিভিউ এনবি তৈরি করেছি।


0

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

https://towardsdatascience.com/version-control-for-jupyter-notebook-3e6cef13392d

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.