পাইথন কোডটিকে পিইপি 8 অনুসারে রূপান্তর করার সরঞ্জাম


113

আমি জানি এমন কিছু সরঞ্জাম রয়েছে যা আপনার পাইথন কোডটি পিইপি 8 এর সাথে সম্মতিযুক্ত কিনা তা যাচাই করে, উদাহরণস্বরূপ একটি অনলাইন পরিষেবা এবং পাইথন মডিউল উভয়ই রয়েছে ।

তবে আমি এমন কোনও পরিষেবা বা মডিউল খুঁজে পাই না যা আমার পাইথন ফাইলটিকে একটি স্ব-অন্তর্ভুক্ত, পিইপি 8 বৈধ পাইথন ফাইলে রূপান্তর করতে পারে। কেউ আছে কি না জানেন?
আমি ধরে নিই যে এটি PEP8 কোডের উপস্থিতি সম্পর্কে সমস্তই ঠিক আছে, তাই না?


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

1
@ অশ্বিনীচৌধারি এটি একটি দুর্দান্ত বিষয়, এটি উল্লেখ করার মতো বিষয় যে ভেরিয়েবলের নাম পরিবর্তন করা ইতিমধ্যে আপনার কোড ব্যবহার করে অন্যকেও প্রভাবিত করতে পারে, যেমন এটি সর্বদা ভাল ধারণা নয়। (অটোপেপ 8 এটি করে না))
অ্যান্ডি হেডেন

উত্তর:


38

দুর্ভাগ্যক্রমে "পেপ 8 স্টর্মিং" (পুরো প্রকল্প) এর বেশ কয়েকটি নেতিবাচক পার্শ্ব প্রতিক্রিয়া রয়েছে:

  • প্রচুর মার্জ-কোন্দল
  • ব্রেক গিট দোষ
  • কোড পর্যালোচনা কঠিন করুন

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

মূলত আপনি যে প্রকল্পটি পেয়েছেন তার চেয়ে এই প্রকল্পটি কিছুটা ভাল রেখে দেওয়া :

pip install pep8radius

মনে করুন আপনি নিজের কাজটি বন্ধ করে দিয়েছেন masterএবং প্রতিশ্রুতি দিতে প্রস্তুত:

# be somewhere in your project directory
# see the diff with pep, see the changes you've made since master
pep8radius master --diff
# make those changes
pep8radius master --diff --in-place

বা শেষ প্রতিশ্রুতিবদ্ধ হওয়ার পরে আপনি যে নতুন লাইনটি প্রতিযোগিত করেছেন তা পরিষ্কার করার জন্য:

pep8radius --diff
pep8radius --diff --in-place

# the lines which changed since a specific commit `git diff 98f51f`
pep8radius 98f51f --diff

মূলত pep8radiusগিট / এইচজি ডিজফের আউটপুটে ( শেষ ভাগ করা কমিট থেকে ) লাইনগুলিতে লাইনগুলিতে অটোপেপ 8 প্রয়োগ করা হয় ।

এই স্ক্রিপ্টটি বর্তমানে গিট এবং এইচজি সহ কাজ করে, যদি আপনি অন্য কিছু ব্যবহার করেন এবং এটি কাজ করতে চান তবে দয়া করে একটি মন্তব্য / ইস্যু / জনসংযোগ পোস্ট করুন !


2
+1 খুব ভাল উদ্যোগ ... আমি একই উদ্দেশ্যে একটি নোটপ্যাড ++ প্লাগইন কীভাবে তৈরি করব সে সম্পর্কে ভাবছি ... কারণ এটি উইন্ডোজে আমার প্রিয় সম্পাদক
kmonsoor

1
@ কমসনুর ভাল ধারণা, আমি সম্পাদক প্লাগইন সম্পর্কে চিন্তা করিনি! গিথুব-এ আমি জানি যে কোনও উপায়ে সি এল এলির বাইরে ব্যবহার করা / সহজ করাতে পারি ... আমি কয়েকটি (সমাধানযোগ্য) বিষয়কে বাদ দিয়েছি।
অ্যান্ডি হেডেন

এখানে আমি সম্পাদক প্লাগইনগুলির একটি আকর্ষণীয় তালিকা পেয়েছি github.com/jcrocholl/pep8/wiki/RelatedTools , যদিও নোটপ্যাড ++ এর জন্য ভাগ্য নেই ...
kmonsoor

1
আমি সবেমাত্র নোটপ্যাড ++ এবং অটোপেপ 8 এর মধ্যে ব্রিজ করার জন্য একটি স্ক্রিপ্ট তৈরি করেছি, যা অন্য একটি প্লাগইন "পাইথন স্ক্রিপ্ট" তে ভিত্তি করে রয়েছে। তবে এটি কাজ করে। Plz এখানে চেক করুন: bit.ly/pep8_tonizer
kmonsoor

184

আপনি autopep8 ব্যবহার করতে পারেন ! আপনি নিজের কাছে এক কাপ কফি বানানোর সময় এই সরঞ্জামটি আনন্দের সাথে সেই সমস্ত পেস্কি পিইপি 8 লঙ্ঘনগুলি সরিয়ে দেয় যা কোডটির অর্থ পরিবর্তন করে না ।

এটি পাইপের মাধ্যমে ইনস্টল করুন:

pip install autopep8

এটি একটি নির্দিষ্ট ফাইলে প্রয়োগ করুন:

autopep8 py_file --in-place

বা আপনার প্রকল্পে (পুনরাবৃত্তভাবে), ভার্বোস বিকল্পটি এটি কীভাবে চলছে সে সম্পর্কে আপনাকে কিছু প্রতিক্রিয়া দেয় :

autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose

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

এই মুহুর্তে আমি প্রতিযোগিতা করার এবং প্রতিশ্রুতিবদ্ধ হওয়ার পরামর্শ দিচ্ছি!

তুমি যদি চাও "পূর্ণ" পিইপি 8 সম্মতি চান: আমি যে কৌশলটি ব্যবহার করেছি তা হ'ল উপরের মতো অটোপেপ 8 চালানো, তারপরে পিইপি 8 চালান, যা বাকী লঙ্ঘন (ফাইল, লাইন নম্বর এবং কী) মুদ্রণ করে:

pep8 project_dir --ignore=E501

এবং ম্যানুয়ালি এগুলি পৃথকভাবে পরিবর্তন করুন (যেমন E712 গুলি - বুলিয়ানের সাথে তুলনা)।

দ্রষ্টব্য: অটোপেপ 8 একটি অফার করে --aggressive যুক্তি সরবরাহ করে ( এই অর্থ-পরিবর্তনের লঙ্ঘনগুলিকে "সংশোধন" করতে), তবে সাবধান থাকুন যদি আপনি আক্রমণাত্মক ব্যবহার করেন তবে আপনাকে ডিবাগ করতে হতে পারে ... (উদাহরণস্বরূপ নম্পী / পান্ডাসে True == np.bool_(True)না True is np.bool_(True)!)

আপনি প্রতিটি ধরণের (তার আগে এবং পরে) কতগুলি লঙ্ঘন পরীক্ষা করতে পারেন:

pep8 --quiet --statistics .

দ্রষ্টব্য: আমি বিবেচনা করি E501s (খুব দীর্ঘ লাইন) একটি বিশেষ কেস কারণ সম্ভবত আপনার কোডে এগুলি প্রচুর হবে এবং কখনও কখনও এগুলি অটোপেপ 8 দ্বারা সংশোধন করা হয় না।

উদাহরণ হিসাবে, আমি এই কৌশলটি পান্ডাস কোড বেসে প্রয়োগ করেছি ।


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

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

2
এটি মন্তব্যগুলির মধ্যে স্ট্রানক এবং হোয়াইটকে প্রয়োগ করে?
এরিক

1
25 ই অক্টোবর, 2017 অবধিpep8 , এই উত্তরে উল্লিখিত প্যাকেজটির নতুন নামকরণ করা হয়েছে pycodestyle: github.com/PyCQA/pycodestyle/releases/tag/1.7.1
hb20007

8

অ্যান্ডি হ্যাডেন অটোপেপ 8-এর ভালো ধারণা দিয়েছেন। এটি ছাড়াও আরও একটি প্যাকেজ রয়েছে যার নাম রয়েছে পেপ ৮৮৮ যা একই জিনিসটি করে।

তবে উভয় প্যাকেজই কেবলমাত্র লিন্টের ত্রুটিগুলি সরাতে পারে তবে তারা কোডটি ফর্ম্যাট করতে পারে না।

little = more[3:   5]

উপরের কোডটি পেপ ৮৮ পরেও একই থাকে। কোডটি এখনও ভাল দেখাচ্ছে না। আপনি ইয়াপফের মতো ফর্ম্যাটর ব্যবহার করতে পারেন যা কোডটি পিইপি 8 অনুগত হলেও কোডটি ফর্ম্যাট করবে। উপরের কোডটিতে ফর্ম্যাট করা হবে

little = more[3:5]

কিছু সময় এটি আপনার ম্যানুয়াল ফর্ম্যাটটিকেও ধ্বংস করে দেয়। উদাহরণ স্বরূপ

BAZ = {
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
}

রূপান্তর করা হবে

BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}

তবে আপনি এটি কিছু অংশ উপেক্ষা করতে বলতে পারেন।

BAZ = {
   [1, 2, 3, 4],
   [5, 6, 7, 8],
   [9, 10, 11, 12]
}  # yapf: disable

আমার পুরানো ব্লগ পোস্ট থেকে নেওয়া: স্বয়ংক্রিয়ভাবে PEP8 এবং আপনার পাইথন কোড ফর্ম্যাট করুন!


2
কি little = more[3: 5]pep8 (গ্রন্থাগার) একটি বাগ? ইয়াপফ অবশ্যই এখানে ভবিষ্যত, এর পিছনে অ্যালগরিদম (মূলত সমস্ত ফর্ম্যাটিং বিকল্পের গ্রাফের একটি সংক্ষিপ্ততম পথ) খুব মার্জিত সমাধান, এবং সম্ভবত কম বাগের পাশাপাশি ক্যানোনিকাল ফর্ম্যাটিং থাকবে।
অ্যান্ডি হেডেন

অ্যান্ডি হাইডেন দেখে মনে হচ্ছে এটি একটি অনুপস্থিত বৈশিষ্ট্য, এটি E225
চিলারঅনান্দ

5

আপনি যদি ग्रहण + পিডিএভ ব্যবহার করছেন তবে আপনি পাইডেভের সেটিংস থেকে অটোপেপ 8 সক্রিয় করতে পারবেন: উইন্ডোজ -> পছন্দসমূহ -> অনুসন্ধান ফিল্টারটিতে 'অটোপেইপ 8' টাইপ করুন।

কোড বিন্যাসকরণের জন্য 'autopep8.py ব্যবহার করুন?' -> ঠিক আছে

এখন গ্রহনের সিটিআরএল-শিফট-এফ কোড বিন্যাসে অটোপেপ 8 ব্যবহার করে আপনার কোডটি ফর্ম্যাট করা উচিত :)

স্ক্রিন শট


3

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

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

তাদের সকলের কনফিগার করার জন্য পৃথক অনুমতি রয়েছে - উদাহরণস্বরূপ, পাইলিন্টারটি তার সমস্ত নিয়মে কনফিগারযোগ্য (আপনি প্রতিটি ধরণের সতর্কতা চালু করতে / বন্ধ করতে পারেন), কালোকে একেবারেই অক্ষম করুন।

এখানে কয়েকটি দরকারী লিঙ্ক এবং টিউটোরিয়াল রয়েছে:

ডকুমেন্টেশন:

লিটারগুলি (জনপ্রিয়তার ক্রমে):

  • টাইপ চেকগুলির জন্য মাইপি https://github.com/python/mypy ল্যাটার (PEP-484)
  • পাইকোডাস্টাইল https://github.com/PyCQA/pycodestyle - PEP-8 ব্যবহার করে খুব ভাল, খুব জনপ্রিয়। প্রায়শই পাইলট এবং ফ্লেক 8 এর পাশাপাশি ব্যবহৃত হয় (একসাথে)
  • পাইলট https://github.com/PyCQA/pylint খুব কনফিগারযোগ্য, সক্রিয়ভাবে সমর্থিত
  • ডাকাত https://github.com/PyCQA/bandit линтер по безопасности безопасности
  • প্রসপেক্টর https://github.com/PyCQA/prospector পাইলট + কোড সমস্যা পরীক্ষা করে
  • প্লাগিনগুলি চালু করার ক্ষমতা সহ flake8 https://github.com/PyCQA/flake8 পাইকোডাস্টাইল মোড়ক। বিভিন্ন কনফিগারযোগ্য প্লাগইনগুলির খুব বড় তালিকা। এখানে দুর্দান্ত ফ্লেক 8 রেপো রয়েছে: https://github.com/DmytroLitvinov/awesome-flake8-
  • wemake https://github.com/wemake-services/wemake-python-styleguide - একটি প্রকল্পে বিভিন্ন লিটারের অনেকগুলি একত্রিত করার চেষ্টা করা হচ্ছে (আসলে এটি বেশ কয়েকটি লিটারের স্টাইল সমন্বিত একটি ফ্লেক 8 প্লাগইন)
  • পাইমা https://github.com/klen/pylama একটিতে আরও 10 টি লিটার যুক্ত করার চেষ্টা করছে (মাইপি, পাইলেন্ট, পাইকোডেস্টাইল, পাইডোকস্টাইল и др।)। আমি এখানে একমাত্র সমস্যা দেখতে পাচ্ছি - পুরানো সংস্করণ (প্রায় 10 মাস ধরে গিথুব রেপোতে কোনও আপডেট নেই।)
  • পাইডোস্টাইল https://github.com/PyCQA/pydocstyle ডকাস্ট্রিংস ল্যাটার (পিইপি-257)

কোড বিন্যাস (জনপ্রিয়তার ক্রম):

  • কালো https://github.com/psf/black সর্বাধিক জনপ্রিয় সংকলন, বেশ কয়েকটি বড় সংস্থায় ব্যবহৃত। ইয়াপফের চেয়ে পরে তৈরি হয়েছিল, তবে ইতিমধ্যে গিটহাবের আরও শুরু হয়েছে
  • yapf https://github.com/google/yapf গুগল কোড ফর্ম্যাটার
  • অটোপেপ 8 https://github.com/hhatto/autopep8 পাইকোডাস্টাইলের উপরে তৈরি করুন

1

এখানে অনেক.

আইডিইগুলিতে সাধারণত কিছু ফর্ম্যাটিং ক্ষমতা অন্তর্নির্মিত থাকে Inte ইন্টেলিজ আইডিয়া / পাইচার্ম একইভাবে গ্রহনের জন্য পাইথন প্লাগইন ইত্যাদির জন্য যায় and

এমন একাধিক ভাষা লক্ষ্যবস্তু করতে পারে এমন ফর্ম্যাটর / লিটার রয়েছে। https://coala.io সেগুলির একটি ভাল উদাহরণ।

তারপরে একক উদ্দেশ্যমূলক সরঞ্জাম রয়েছে, যার মধ্যে অনেকগুলি অন্যান্য উত্তরে উল্লেখ করা হয়েছে।

স্বয়ংক্রিয় পুনরায় ফর্ম্যাট করার একটি নির্দিষ্ট পদ্ধতি হ'ল ফাইলটি এএসটি ট্রিতে পার্স করা (কোনও মন্তব্য না ফেলে) এবং তারপরে এটি পাঠ্যে ফেলা (অর্থাত্ মূল বিন্যাসের কিছুই সংরক্ষণ করা হয়নি)। এর উদাহরণ https://github.com/python/black হবে

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