অর্ডার কোডিং মানক আমদানি করুন


84

পিইপি 8 পরামর্শ দেয় যে:

আমদানিগুলি নিম্নলিখিত ক্রমে শ্রেণিবদ্ধ করা উচিত:

  1. স্ট্যান্ডার্ড গ্রন্থাগার আমদানি
  2. সম্পর্কিত তৃতীয় পক্ষের আমদানি
  3. স্থানীয় অ্যাপ্লিকেশন / গ্রন্থাগার নির্দিষ্ট আমদানি

আপনার আমদানির প্রতিটি গ্রুপের মধ্যে একটি ফাঁকা রেখা রাখা উচিত।

সেখানে যদি মান স্ট্যাটিক কোড বিশ্লেষণ সরঞ্জাম ব্যবহার প্যাকেজের মধ্যে যে কোন জায়গায় লঙ্ঘন কিনা তা পরীক্ষা করার একটি উপায় আছে কি, মত pylint, pyflakes, pychecker, pep8?


লঙ্ঘনের উদাহরণ:

from my_package import my_module
from django.db import models
import os

আমদানির সঠিক উপায়:

import os

from django.db import models

from my_package import my_module

4
pep8এক লাইন (E401) তে এটি শুধুমাত্র একাধিক আমদানির জন্য চেক - সরঞ্জাম বর্তমানে এই পরীক্ষা না
ডিএনএ

@ ডিএনএ জেনে ভাল লাগল, ধন্যবাদ আশা করি সেখানে কিছু আছে।
অ্যালেক্স

পাইচার্ম এটি করতে পারে তবে আমি 100% নিশ্চিত নই। যদিও এতে অর্থ ব্যয় হয়।
ক্লাদিউ

4
@ ক্লাডিউ - পাইচার্মের একটি সম্প্রদায়ের সংস্করণও রয়েছে।
অমিত ভার্মা 1

4
আপনি যদি কিছু খুঁজে না পেয়ে থাকেন তবে এটি পরীক্ষা করার জন্য আপনি নিজের পাইলট প্লাগইন লিখতে পারেন। কটাক্ষপাত pylint-plugin-utils এবং একটি উদাহরণ প্লাগ ইন এখানে । (এটি মন্তব্য হিসাবে আরও উপযুক্ত হতে পারে তবে মন্তব্য করার মতো খ্যাতি আমার নেই))
মবিনেট

উত্তর:


70

পাইলটের বর্তমান সংস্করণটি এখন এটি করে এবং এটিকে ত্রুটি শ্রেণি C0411 হিসাবে প্রতিবেদন করে।


9
এটি এখন উচ্চতর ভোটের উত্তর হওয়া উচিত। আরও সাম্প্রতিক সংস্করণের জন্য যা ত্রুটি সংখ্যাগুলি আর প্রদর্শন করে না, এটি ত্রুটি শ্রেণি wrong-import-order
সোরেন জর্নস্ট্যাড

54

আপডেট (2016): এসবিওয়াটারের সর্বাধিক সাম্প্রতিক উত্তর রয়েছে।


খুঁজে পেয়েছি! (দুর্ঘটনাক্রমে, "পাইথনের হ্যাকারের গাইড" পড়ার সময়)

ওপেনস্ট্যাক হ্যাকিং স্টাইল চেক প্রকল্পের নাম হ্যাকিং বেশ কয়েকটি অনন্য flake8এক্সটেনশানকে উপস্থাপন করেছে। নেই hacking_import_groups তাদের মধ্যে (সাথে সম্পর্কিত কমিট )।

উদাহরণ:

  • প্রয়োজনীয়তা

  • উদাহরণস্বরূপ ব্যবহৃত ফাইল

    • tox.ini (আমাদের flake8 বলতে হবে যে আমরা একটি কাস্টম চেক ব্যবহার করতে চাই)

      [hacking]
      local-check = hacking.core.hacking_import_groups
      

      ইউপিডি: hackingচেকের পথে নতুন সংস্করণটি পরিবর্তিত হয়েছে, এখন এটি hacking.checks.imports.hacking_import_groups

    • test.py (চেক লক্ষ্য)

      import requests
      import sys
      from my_module import print_smth
      
      
      print_smth(requests.get('https://google.com'))
      print_smth(sys.version)
      
    • my_module.py(স্থানীয় আমদানি দ্বারা ব্যবহৃত test.py)

      def print_smth(smth):
          print smth
      

তারপরে, যদি আমি এর flake8বিরুদ্ধে দৌড়ে যাই test.py:

$ flake8 test.py
test.py:2:1: H305  imports not grouped correctly (requests: third-party, sys: stdlib)
test.py:3:1: H305  imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
test.py:3:1: H306  imports not in alphabetical order (sys, my_module.print_smth)

তারপরে, আমি যদি আমদানিগুলিকে সঠিক ক্রমে ভাগ করে নিই PEP8:

import sys

import requests

from my_module import print_smth


print_smth(requests.get('https://google.com'))
print_smth(sys.version)

কোনও সতর্কতা পাওয়া যায় নি:

$ flake8 test.py
$

আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে।


4
আপনার নিজের কাছে অনুগ্রহটি পুরষ্কার করা উচিত :-)। সুন্দর বিটিডব্লিউ, আমি নিজেই এটি ব্যবহার শুরু করতে পারি
টিম

4
এটি খুব ত্রুটি-ঝুঁকিপূর্ণ এবং কঠিন ছিল উল্লেখ করে তারা এই চেকটি গ্রহণ করেছেন: github.com/openstack-dev/hacking/commit/…
চাকরিজীবীরা

@ কর্মীরা আপডেটের জন্য ধন্যবাদ! ঠিক আছে, আমি কোনও সমস্যা ছাড়াই এটি ব্যবহার করেছি :)
alecxe

26

কটাক্ষপাত আছে https://pypi.python.org/pypi/isort বা https://github.com/timothycrosley/isort

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

  • ভবিষ্যত
  • পাইথন স্ট্যান্ডার্ড লাইব্রেরি
  • থার্ড পার্টি
  • বর্তমান পাইথন প্রকল্প
  • স্পষ্টত স্থানীয়ভাবে (। আমদানির আগে, যেমন: থেকে। আমদানি এক্স)

কাস্টম পৃথক পৃথক বিভাগ (কনফিগারেশন ফাইলের জোর_সেজাল তালিকা দ্বারা সংজ্ঞায়িত) প্রতিটি বিভাগের ভিতরে আমদানি বর্ণমালা অনুসারে বাছাই করা হয়। দ্বীপটি স্বয়ংক্রিয়ভাবে সদৃশ পাইথন আমদানি সরিয়ে দেয় এবং নির্দিষ্ট লাইন দৈর্ঘ্যের (80 ডিফল্টে ডিফল্ট) আমদানি থেকে দীর্ঘ মোড়কে দেয়।

https://pypi.python.org/pypi/flake8-isort এই কার্যকারিতাটি flake8 এ প্লাগ করে


4
কেবলমাত্র নোট করুন যে আপনি চালনা করে থাকলে isort script_name.py --check-only- এটি কেবল অমীমাংসিত আমদানি পরীক্ষা করে ফলাফলগুলি মুদ্রণ করে - এটি আমার প্রয়োজন I বিকল্পটির জন্য আপনাকে অনেক ধন্যবাদ।
আলেকেক্স

isort -rc --check --diffসমস্ত ফাইলগুলি পুনরাবৃত্তভাবে চেক করুন, কেবল চেক করুন,
শে

7

একটি flake8প্লাগইন বিদ্যমান: flake8- আমদানি-ক্রম

এই প্যাকেজ 3 টি নতুন flake8 সতর্কতা যুক্ত করে

আই 100: আপনার আমদানির বিবৃতিগুলি ভুল ক্রমে।

I101: আপনার আমদানি থেকে নামগুলি ভুল ক্রমে।

I201: বিভাগ বা আমদানির মধ্যে নিউলাইন মিসিং।

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