জাইঙ্গোর সাথে পাইলিন্ট ব্যবহার করা


140

আমি আমার পাইথন প্রকল্পগুলির জন্য বিল্ড প্রসেসে পাইলিন্টকে একীভূত করতে চাই , তবে আমি একটি শো- E1101: *%s %r has no %r member*স্টপারে চলে এসেছি : যে ত্রুটিগুলির জন্য আমি অত্যন্ত দরকারী বলে মনে করি -: - সাধারণ জ্যাঙ্গো ক্ষেত্র ব্যবহার করার সময় ত্রুটিগুলি ততক্ষণে রিপোর্ট করে , উদাহরণ স্বরূপ:

E1101:125:get_user_tags: Class 'Tag' has no 'objects' member

যা এই কোড দ্বারা সৃষ্ট:

def get_user_tags(username):
   """
   Gets all the tags that username has used.

   Returns a query set.
   """
   return Tag.objects.filter(  ## This line triggers the error.
       tagownership__users__username__exact=username).distinct()

# Here is the Tag class, models.Model is provided by Django:
class Tag(models.Model):
   """
   Model for user-defined strings that help categorize Events on
   on a per-user basis.
   """
   name = models.CharField(max_length=500, null=False, unique=True)

   def __unicode__(self):
       return self.name

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

সম্পাদনা: এই সতর্কতা সম্পর্কে সতর্ক না করার জন্য পাইলটটি বলতে কেবলমাত্র আমি খুঁজে পেয়েছি হ'ল (E1101) ধরণের সমস্ত ত্রুটিগুলি ব্লক করা যা কোনও গ্রহণযোগ্য সমাধান নয়, কারণ এটি (আমার মতে) একটি অত্যন্ত কার্যকর ত্রুটি। পাইলট উত্সটি বৃদ্ধি না করে অন্য কোনও উপায় থাকলে দয়া করে আমাকে নির্দিষ্ট করে তুলুন :)

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


4
একটি আপ-টু-ডেট উত্তরের জন্য @ তালভিসের পোস্ট দেখুন!
ব্রেন্ডন 18

এ পাওয়া ভাল সমাধান stackoverflow.com/a/31000713/78234
shahjapan

1
আপনি কি দয়া করে @ ট্যালউইসের উত্তরটি গ্রহণ করতে পারেন? এটি সর্বাধিক আধুনিক ও সঠিক সমাধান।
বিজয় বারাদান

উত্তর:


155

যোগ ignoresবা যুক্ত করে পাইলট কার্যকারিতা অক্ষম বা দুর্বল করবেন না generated-members। জ্যাঙ্গো বোঝে
এমন সক্রিয়ভাবে বিকশিত পাইলিন্ট প্লাগইন ব্যবহার করুন । জাজানোর জন্য এই পাইলেট প্লাগইনটি বেশ ভালভাবে কাজ করে:

pip install pylint-django

এবং পাইলট চলাকালীন কমান্ডের সাথে নীচের পতাকাটি যুক্ত করুন:

--load-plugins pylint_django

বিস্তারিত ব্লগ পোস্ট এখানে


2
ব্লগ পোস্টের লিঙ্কটি মারা গেছে (এত তাড়াতাড়ি)। এখানে থেকে কিছু সংরক্ষণাগার লিঙ্ক ইন্টারনেটের সংরক্ষাণাগার থেকে archive.is
খ্রিস্টান লং

3
এটি সাব্লাইম টেক্সটের সাব্লাইমলাইন্টার প্লাগইন দিয়ে কাজ করতে, আমাকে --load-plugins=pylint_djangoলিন্টার / পাইলিন্ট / আরগস সেটিংয়ে যুক্ত করতে হয়েছিল। '=' চিহ্নটি নোট করুন, এটি ছাড়া এটি কাজ করে না।
ডেনিস গোলোমাজভ

এটা কাজ করে না. আমি এই ত্রুটিটি পেয়েছি: E: 8, 0: 'django.db' মডিউলটিতে কোনও নাম নেই 'মডেল' (কোনও নাম নেই-ইন-মডিউল)
সর্বাধিক

6
আপনি এটি আপনার পাইলট্রিকটিতেও যুক্ত করতে পারেন:[MASTER] load-plugins=pylint_django
আজমেউক

3
বনাম কোডে এটি ডোজ আমার জন্য কাজ করে না যতক্ষণ না আমি ব্যবহারকারীর সেটিংসে নিম্নলিখিতটি না {"python.linting.pylintArgs": [ "--load-plugins=pylint_django" ],} রাখি
আলি-মায়োসফি

63

আমি নিম্নলিখিত ব্যবহার: pylint --generated-members=objects


টাইপচেকের অধীনে ম্যান পাইলিন্ট (1)--generated-members=<members names> সদস্যদের তালিকা যা গতিময়ভাবে সেট করা হয় এবং পাইলট ইনফারেন্স সিস্টেমটি মিস করে থাকে এবং যাতে অ্যাক্সেস করা হয় তখন E0201 এবং E1101 ট্রিগার করা উচিত নয় । [বর্তমান: রিকুয়েস্ট, অ্যাকলি_উসারস, একিউ প্যারেন্ট]
মার্ক মিকোফস্কি


2
জেনারেটেড-সদস্যরা ব্যবহার করে কেবল আপনার কাছ থেকে এই ত্রুটিগুলি লুকিয়ে রাখে, এখনও যদি ভুল বস্তুতে অবজেক্ট ফিল্ড অ্যাক্সেস করার চেষ্টা করা হয় তখন ত্রুটি হতে পারে। পরিবর্তে পাইলট-জাঙ্গো প্লাগইন ব্যবহার করুন।
ভজ্ক হার্মেকজ

5
এটি পাইলিন্টকে ঠিক করার ভুল উপায় - এর কার্যকারিতা কিছুটা অক্ষম করে। আপনাকে যা করতে হবে তা হ'ল জাইঙ্গো বোঝে এমন একটি পাইলিন্ট প্লাগইন ইনস্টল করা । দেখুন stackoverflow.com/a/31000713/78234
তাল উইস

31

আমার ~ / .pylintrc রয়েছে

[TYPECHECK]
generated-members=REQUEST,acl_users,aq_parent,objects,_meta,id

শেষ দুটি বিশেষত জ্যাঙ্গোর জন্য।

নোট করুন যে পাইলিন্ট 0.21.1 এ একটি বাগ রয়েছে যা এই কাজটি করার জন্য প্যাচিং দরকার।

সম্পাদনা: এটিকে আরও কিছুটা নিয়ে গোলমাল করার পরে আমি পাইলিন্টকে উপরের অংশটিকে প্রসারিত করার জন্য মাত্র একটি ছোট্ট হ্যাক করার সিদ্ধান্ত নিয়েছি:

[TYPECHECK]
generated-members=REQUEST,acl_users,aq_parent,objects,_meta,id,[a-zA-Z]+_set

আমি কেবল যোগ করেছি:

    import re
    for pattern in self.config.generated_members:
        if re.match(pattern, node.attrname):
            return

বাগ রিপোর্টে উল্লিখিত ফিক্সের পরে (যেমন, লাইন 129 এ)।

সুখের দিনগুলি!


আপনার প্যাচটি পাইলেন্টে পুনরায় রক্ষণাবেক্ষণকারীদের কাছে জমা দেওয়া উচিত।
অস্পষ্টতা

আসলে তারা এই প্যাচটি 0.24-এ অন্তর্ভুক্ত করেছে, তবে তারা shlexপ্যাকেজটি ব্যবহার শুরু করেছে এবং এখন অন্য কিছু ভেঙেছে broken gen.wordchars += "[]-+"এটির কাজ পেতে আমাকে 135 লাইনে যুক্ত করতে হয়েছিল ...
সাইমন 21

4
জেনারেটেড-সদস্যরা ব্যবহার করে কেবল আপনার কাছ থেকে এই ত্রুটিগুলি লুকিয়ে রাখে, ভুল অবজেক্টে 'অবজেক্টস' ক্ষেত্রটি অ্যাক্সেস করার চেষ্টা করার পরেও ত্রুটি হতে পারে। পরিবর্তে পাইলট-জাঙ্গো প্লাগইন ব্যবহার করুন।
ভজ্ক হার্মেকজ

4
এটি পাইলিন্টকে ঠিক করার ভুল উপায় - এর কার্যকারিতা কিছুটা অক্ষম করে। আপনাকে যা করতে হবে তা হ'ল জাইঙ্গো বোঝে এমন একটি পাইলিন্ট প্লাগইন ইনস্টল করা । দেখুন stackoverflow.com/a/31000713/78234
তাল উইস

3
@ ট্যালউইস - ন্যায্যতার সাথে, এই উত্তরটি তার চেয়ে তিন বছরের বেশি পুরানো pylint-django, তাই ডাউনভোটটি কিছুটা কঠোর ...
সাইমন

27

আপনি যদি ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করেন তবে এটি করুন:

pip install pylint-django

এবং ভিএসসি কনফিগারেশনে যুক্ত করুন:

"python.linting.pylintArgs": [
    "--load-plugins=pylint_django"
],

2
এখন পর্যন্ত সেরা প্রতিক্রিয়া: ডি
সার্ফার 2

19

জ্যাঙ্গো-লিঙ্ক্ট একটি দুর্দান্ত সরঞ্জাম যা জঙ্গো নির্দিষ্ট সেটিংসের সাথে পাইলটটি মোড় করে: http://chris-lamb.co.uk/projects/django-lint/

গিথুব প্রকল্প: https://github.com/lamby/django-lint


1
আমি জ্যাঙ্গো-নির্দিষ্ট পাইলটটির ধারণাটি পছন্দ করি তবে শেষ বার চেষ্টা করার পরে এটি একটি বড় বগি বলে মনে হয়।
ওয়ার্নাইট

3
এছাড়াও এটি পিপিআইয়ের মাধ্যমে পাওয়া যায় না এবং ওয়েবসাইটটি যথেষ্ট তথ্য দেয় না বলে মনে হয়: বর্তমান সংস্করণটি কী?
ওয়ার্নাইট

1
আমি ধারণাটি পছন্দ করি তবে এই প্রয়োগটি কেবলমাত্র অর্ধ-বেকড, এবং কোনও মাঝারি আকারের কোডবেসকে ভেঙে দেয়। এটি আসল কার্যকর হওয়ার আগে অনেক দীর্ঘ পথ যেতে হবে।
সেরিন

1
@ গুর্নি অ্যালেক্স, লিঙ্কটি মারা গেছে।
শাটল 87

2
দেখে মনে হচ্ছে পাইলট-জাঙ্গো এখন আরও সক্রিয়, পরামর্শ দেওয়া সমাধান হওয়া উচিত।
ভজ্ক হার্মেকজ

16

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

জ্যাঙ্গো যে যাদুটি ব্যবহার করে তা সম্পর্কে শেখানোর জন্য আপনি এটি পাইলট প্রসারিত করতে পারেন, বা এটি মেটাগ্লাস বা জটিল বেসক্লাসগুলি আরও ভালভাবে বোঝার জন্য করতে পারেন, বা এক বা একাধিক বৈশিষ্ট্য সনাক্ত করার পরে এই জাতীয় ঘটনাগুলি উপেক্ষা করার জন্য এটি বেশিরভাগ ক্ষেত্রেই বুঝতে পারে না। আমি মনে করি না এটি বিশেষভাবে সহজ হবে। উত্স, কমান্ড-লাইন বিকল্প বা একটি .pylintrc ফাইলের বিশেষ মন্তব্যের মাধ্যমে আপনি কেবল পাইলিন্টকে এই বিষয়গুলি সম্পর্কে সতর্ক না করার জন্য বলতে পারেন।


3
এটা সহজ জ্যাঙ্গো সম্পর্কে Pylint শেখান নয়, কিন্তু এটি সম্পন্ন করা হয়েছে: সমস্ত আপনাকে যা করতে হবে যে একটি Pylint প্লাগইন ইনস্টল হয় বুঝতে পারে জ্যাঙ্গো। দেখুন stackoverflow.com/a/31000713/78234
তাল উইস

ওয়েল আমি এটি ইনস্টল করেছি তবে এটি এখনও পাতাগুলির সাথে তুল্য রয়েছে যেমন ক্যোরিসেটের কোনও অপসারণ নেই ...
Eino Mäkitalo

7

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


আকর্ষণীয় - আমি পাইফ্লেক্সকে অন্য চেহারা দেব।
rcreswick

2
পাইচেকার পাইলট থেকে অনেক কম ক্যাচ করে। ডঘহেলম্যান
জাস্টিন

1
পাইলিন্ট ছেড়ে দেওয়ার দরকার নেই - আপনাকে যা করতে হবে তা হ'ল জাইঙ্গো বোঝে এমন একটি পাইলিন্ট প্লাগইন ইনস্টল করা । দেখুন stackoverflow.com/a/31000713/78234
তাল উইস

7

এটি কোনও সমাধান নয়, তবে objects = models.Manager()কোনও আচরণ পরিবর্তন না করে আপনি নিজের জাজানো মডেলগুলিতে যুক্ত করতে পারেন ।

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


আহ ... টিপ এর জন্য ধন্যবাদ। আমি জাঙ্গো উত্সের স্থানীয় অনুলিপিতে মডেল.মোডেলগুলিতে কেবল এটি যুক্ত করার চেষ্টা করতে পারি এবং দেখুন এটি সেগুলি করে কিনা।
rcreswick

আমি মনে করি এটি একটি দুর্দান্ত সমাধান কারণ এটি সতর্কবাণীতে কোনও আপস করে না।
টম লিজ

1
এটি একটি খারাপ সমাধান। নিজেকে পুনরাবৃত্তি করা এবং এটি সম্ভবপর এমন কিছু প্রতিস্থাপনের পরে পরিবর্তিত হবে (সুতরাং এটি একটি অসম্পূর্ণ QA সরঞ্জাম ঠিক করার জন্য)?
ক্রিস মরগান

2
আমি এটিকে একটি খারাপ সমাধান বলব না: অন্তর্নিহিতের চেয়ে সুস্পষ্ট ভাল। সম্ভবত objectsযাদুকরভাবে যাইহোক যুক্ত করা উচিত নয়।
হার্ডি

1
আমি মনে করি এটি পাইলেন্ট ঠিক করার ভুল উপায় - এক অর্থে জ্যাঙ্গোকে প্যাচ করে। আপনাকে যা করতে হবে তা হ'ল জাইঙ্গো বোঝে এমন একটি পাইলিন্ট প্লাগইন ইনস্টল করা । দেখুন stackoverflow.com/a/31000713/78234
তাল উইস

5

সঙ্গে পাইলট চালানোর চেষ্টা করুন

pylint --ignored-classes=Tags

যদি এটি কাজ করে তবে অন্যান্য সমস্ত জ্যাঙ্গো ক্লাস যুক্ত করুন - সম্ভবত স্ক্রিপ্ট ব্যবহার করে বলে অজগর: পি

এর জন্য ডকুমেন্টেশন --ignore-classesহ'ল:

--ignored-classes=<members names>
শ্রেণীর নামের তালিকা, যার জন্য সদস্যের বৈশিষ্ট্যগুলি পরীক্ষা করা উচিত নয় (অ্যাট্রিবিউট ডায়নামিক্যালি সেট সহ শ্রেণীর জন্য দরকারী)। [বর্তমান:% ডিফল্ট]

আমার যুক্ত করা উচিত এটি আমার দৃষ্টিতে একটি বিশেষ মার্জিত সমাধান নয়, তবে এটি কাজ করা উচিত।


এটি কেবল তখনই কাজ করে যদি আমি classes শ্রেণিতে কোনও ত্রুটি না করি;)। আমি যদি সম্ভব হয় তবে কোড উপেক্ষা করে এড়াতে চাই - আমি মনে করি কোডবেসের বিভিন্ন অংশ যাচাইয়ের বিভিন্ন ডিগ্রি বিশ্লেষণ করা খুব খারাপ ধারণা। আমি কোনটি ভুলে যাব এবং ডিবাগ করার সময় মিথ্যা অনুমানগুলি করব
rcreswick

1
এটি পাইলিন্টকে ঠিক করার ভুল উপায় - এর কার্যকারিতা কিছুটা অক্ষম করে। আপনাকে যা করতে হবে তা হ'ল জাইঙ্গো বোঝে এমন একটি পাইলিন্ট প্লাগইন ইনস্টল করা । দেখুন stackoverflow.com/a/31000713/78234
তাল উইস


1

এখন পর্যন্ত আমি এর বাস্তব কোনও সমাধান খুঁজে পাইনি তবে কাজ করে যাচ্ছি:

  • আমাদের সংস্থায় আমাদের একটি পাইলট স্কোর প্রয়োজন> ৮. কোডটি খুব বেশি "অস্বাভাবিক" নয় এমনটি নিশ্চিত করার সময় কোডিং অনুশীলনের পাইলট বুঝতে পারে না। এখনও অবধি আমরা এমন কোনও উদাহরণ দেখিনি যেখানে E1101 আমাদের 8 বা ততোধিক স্কোরের দিকে পৌঁছেছে।
  • আমাদের 'মেক চেক' টার্গেটগুলি ফিল্টার আউট করে "এর জন্য কোনও 'অবজেক্ট' সদস্য" বার্তা নেই যা জাইঙ্গো বুঝতে না পাইলট দ্বারা সৃষ্ট বিভ্রান্তির বেশিরভাগ দূরে সরিয়ে দেয়।

0

জন্য neovim & vim8ব্যবহার w0rp's aleপ্লাগইন। আপনি সবকিছু সহ সঠিকভাবে ইনস্টল করা থাকলে w0rp's ale, pylint& pylint-django। আপনার vimrcনীচের লাইনটি যুক্ত করুন এবং জ্যাঙ্গো ব্যবহার করে ওয়েব অ্যাপ্লিকেশন বিকাশে মজা করুন। ধন্যবাদ।

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