يقوم autopep8 تلقائيًا بتنسيق كود Python ليتوافق مع دليل نمط PEP 8. يستخدم الأداة المساعدة pycodestyle لتحديد أجزاء التعليمات البرمجية التي تحتاج إلى تنسيق. autopep8 قادر على إصلاح معظم مشكلات التنسيق التي يمكن الإبلاغ عنها بواسطة pycodestyle.
محتويات
تثبيت
متطلبات
الاستخدام
سمات
استخدام أكثر تقدما
تعطيل سطراً تلو الآخر
استخدم كوحدة نمطية
إعدادات
pyproject.toml
الاستخدام مع الالتزام المسبق
اختبار
استكشاف الأخطاء وإصلاحها
pkg_resources.DistributionNotFound
روابط
من النقطة:
تثبيت النقطة $ - ترقية autopep8
فكر في استخدام خيار --user
.
يتطلب autopep8 pycodestyle.
لتعديل ملف في مكانه (بالمستوى العدواني 2):
$ autopep8 --in-place --aggressive --aggressive <filename>
قبل تشغيل autopep8.
import math, sys;def example1():####هذا تعليق طويل. يجب أن يتم تغليفها بحيث تتلاءم مع 72 حرفًا.some_tuple=( 1,2, 3,'a' );some_variable={'long':'يجب أن تكون سطور التعليمات البرمجية الطويلة ملتفة ضمن 79 حرفًا.','other':[math .pi, 100,200,300,9876543210,'هذه سلسلة طويلة مستمرة'],'more':{'inner':'هذا كله يجب أن يكون السطر المنطقي ملتفًا.',some_tuple:[1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key(''));class example3( object ):def __init__ ( self, bar ): #Comments يجب أن تحتوي على مسافة بعد التجزئة. إذا شريط : شريط + = 1؛ شريط = شريط * شريط؛ شريط الإرجاع else:some_string = """ لا ينبغي لمس المسافة البادئة في السلاسل متعددة الأسطر. يجب إعادة وضع مسافة بادئة للتعليمات البرمجية الفعلية فقط."""return (sys.path, some_string)
بعد تشغيل autopep8.
import mathimport sysdef example1():# هذا تعليق طويل. يجب أن يتم تغليف هذا ليتناسب مع 72# حرفًا.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'يجب أن تكون سطور التعليمات البرمجية الطويلة ملتفة ضمن 79 حرفًا.','other': [math .pi,100,200,300,9876543210,'هذه سلسلة طويلة مستمرة'],'more': {'inner': 'هذا منطقي بالكامل يجب أن يكون السطر ملتفًا.',some_tuple: [1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) في {'has_key () تم إهماله': True}class example3(object):def __init__(self, bar):# يجب أن تحتوي التعليقات على مسافة بعد التجزئة.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ لا ينبغي لمس المسافة البادئة في السلاسل متعددة الأسطر. يجب إعادة وضع مسافة بادئة للتعليمات البرمجية الفعلية فقط """العودة (sys.path، some_string)
خيارات:
الاستخدام: autopep8 [-h] [--version] [-v] [-d] [-i] [--اسم ملف التكوين العالمي] [--تجاهل التكوين المحلي] [-r] [-j n] [-p n] [-a] [--تجريبي] [--استبعاد الكرات] [--إصلاحات القائمة] [--تجاهل الأخطاء] [--حدد الأخطاء] [--أقصى طول سطر n] [--خط خط النطاق] [--إغلاق الإغلاق] [-رمز الخروج] [ملفات [ملفات...]] يقوم تلقائيًا بتنسيق كود Python ليتوافق مع دليل نمط PEP 8. الحجج الموضعية: الملفات لتنسيقها أو "-" للمعيار في الحجج الاختيارية: -h, --help في إظهار رسالة المساعدة هذه والخروج --version إظهار رقم إصدار البرنامج والخروج -v، --verbose طباعة الرسائل المطولة؛ متعددة -v يؤدي إلى المزيد رسائل مطولة -d, --diff قم بطباعة الفرق للمصدر الثابت -i, --in-place قم بإجراء تغييرات على الملفات الموجودة --اسم ملف التكوين العالمي المسار إلى ملف التكوين العام pep8؛ إذا كان هذا الملف يفعل غير موجود ثم يتم تجاهل هذا (الافتراضي: ~/.config/pep8) --تجاهل التكوين المحلي لا تبحث عن ملفات التكوين المحلية وتطبيقها؛ إذا لم يكن كذلك تم تمريره، ويتم تحديث الإعدادات الافتراضية بأية ملفات تكوين موجودة الدليل الجذر للمشروع -r, --recursive يتم تشغيله بشكل متكرر عبر الدلائل؛ يجب أن تستخدم مع --في المكان أو --diff -j n، --jobs n عدد الوظائف الموازية؛ تطابق عدد وحدة المعالجة المركزية إذا كانت القيمة أقل من 1 -p n، --pep8-يمر n الحد الأقصى لعدد تمريرات pep8 الإضافية (الافتراضي: لانهائي) -a، --aggressive تمكين التغييرات التي لا تحتوي على مسافات بيضاء؛ متعددة - نتيجة في تغييرات أكثر عدوانية - تمكين الإصلاحات التجريبية --exclude globs تستبعد أسماء الملفات/الدليل التي تطابق هذه الفواصل- كرات منفصلة --list-fixes قائمة رموز الإصلاحات؛ يستخدم بواسطة --ignore و --select --تجاهل الأخطاء لا يصلح هذه الأخطاء/التحذيرات (الافتراضي: E226، E24، W50، W690) - حدد الأخطاء لإصلاح هذه الأخطاء/التحذيرات فقط (على سبيل المثال E4، W) --max-line-length n قم بتعيين الحد الأقصى لطول الخط المسموح به (الافتراضي: 79) - خط خط النطاق، - خط خط النطاق إصلاح الأخطاء الموجودة ضمن هذا النطاق الشامل فقط أرقام الأسطر (على سبيل المثال 1 99)؛ تتم فهرسة أرقام الأسطر في 1 --hang-closing، تم تمرير خيار Hang-Closing إلى pycodestyle --exit-code تغيير سلوك رمز الخروج. السلوك الافتراضي قيمة الإرجاع، 0 لا يوجد اختلافات، 1 هو خروج الخطأ. العودة 2 عند إضافة هذا الخيار. 2 موجود الاختلافات.
يعمل autopep8 على إصلاح المشكلات التالية التي تم الإبلاغ عنها بواسطة pycodestyle:
E101 - إعادة وضع مسافة بادئة على كافة الأسطر. E11 - إصلاح المسافة البادئة. E121 - إصلاح المسافة البادئة لتكون من مضاعفات الأربعة. E122 - إضافة مسافة بادئة غائبة للمسافة البادئة المعلقة. E123 - قم بمحاذاة قوس الإغلاق ليتوافق مع قوس الفتح. E124 - قم بمحاذاة قوس الإغلاق لمطابقة المسافة البادئة المرئية. E125 - مسافة بادئة لتمييز السطر عن السطر المنطقي التالي. E126 - إصلاح المسافة البادئة المعلقة الزائدة. E127 - إصلاح المسافة البادئة المرئية. E128 - إصلاح المسافة البادئة المرئية. E129 - إصلاح المسافة البادئة المرئية. E131 - إصلاح المسافة البادئة المعلقة لخط الاستمرار غير المحاذي. E133 - إصلاح المسافة البادئة المفقودة لقوس الإغلاق. E20 - إزالة المسافات البيضاء الزائدة. E211 - إزالة المسافات البيضاء الزائدة. E22 - إصلاح المسافات البيضاء الدخيلة حول الكلمات الرئيسية. E224 - قم بإزالة المسافات البيضاء الزائدة حول المشغل. E225 - إصلاح المسافة البيضاء المفقودة حول المشغل. E226 - إصلاح المسافة البيضاء المفقودة حول العامل الحسابي. E227 - إصلاح المسافة البيضاء المفقودة حول عامل التشغيل bitwise/shift. E228 - إصلاح المسافة البيضاء المفقودة حول مشغل modulo. E231 - إضافة مسافة بيضاء مفقودة. E241 - إصلاح المسافات البيضاء الدخيلة حول الكلمات الرئيسية. E242 - قم بإزالة المسافات البيضاء الزائدة حول المشغل. E251 - قم بإزالة المسافة البيضاء حول علامة المعلمة '='. E252 - مسافة بيضاء مفقودة حول المعلمة المتساوية. E26 - إصلاح التباعد بعد تجزئة التعليق للتعليقات المضمنة. E265 - إصلاح التباعد بعد تجزئة التعليق للتعليقات المحظورة. E266 - إصلاح عدد كبير جدًا من "#" البادئة للتعليقات المحظورة. E27 - إصلاح المسافات البيضاء الدخيلة حول الكلمات الرئيسية. E301 - إضافة سطر فارغ مفقود. E302 - إضافة سطرين فارغين مفقودين. E303 - إزالة الأسطر الفارغة الإضافية. E304 - إزالة السطر الفارغ التالي لوظيفة الديكور. E305 - من المتوقع وجود سطرين فارغين بعد نهاية الوظيفة أو الفصل. E306 - سطر فارغ واحد متوقع قبل التعريف المتداخل. E401 - ضع الواردات في أسطر منفصلة. E402 - إصلاح استيراد مستوى الوحدة وليس في أعلى الملف E501 - حاول جعل الأسطر تتلاءم مع أحرف --max-line-length. E502 - إزالة الهروب الدخيل من السطر الجديد. E701 - ضع العبارة المركبة المفصولة بنقطتين في أسطر منفصلة. E70 - ضع العبارة المركبة المفصولة بفاصلة منقوطة على أسطر منفصلة. E711 - إصلاح المقارنة مع لا شيء. E712 - إصلاح المقارنة مع القيمة المنطقية. E713 - استخدم "ليس في" لاختبار العضوية. E714 - استخدم اختبار "ليس" لهوية الكائن. E721 - استخدم "isinstance()" بدلاً من مقارنة الأنواع مباشرةً. E722 - إصلاح العارية باستثناء. E731 - استخدم def عندما لا يقوم الاستخدام بتعيين تعبير lambda. W291 - إزالة المسافة البيضاء الزائدة. W292 - أضف سطرًا جديدًا واحدًا في نهاية الملف. W293 - إزالة المسافة البيضاء الزائدة على السطر الفارغ. W391 - إزالة الأسطر الفارغة الزائدة. W503 - إصلاح فاصل الأسطر قبل المشغل الثنائي. W504 - إصلاح فاصل الأسطر بعد المشغل الثنائي. W605 - إصلاح تسلسل الهروب غير الصالح "x".
يعمل autopep8 أيضًا على إصلاح بعض المشكلات التي لم يتم العثور عليها بواسطة pycodestyle.
تطبيع الملفات ذات نهايات الخطوط المختلطة.
ضع سطرًا فارغًا بين سلسلة مستندات الفئة وإعلان الطريقة الأولى الخاصة بها. (ممكن مع E301
.)
قم بإزالة الأسطر الفارغة بين إعلان الوظيفة وسلسلة المستندات الخاصة بها. (ممكن مع E303
.)
يتجنب autopep8 إصلاح بعض المشكلات التي عثر عليها pycodestyle.
E112
/ E113
لعدم التعليقات هي تقارير عن مسافة بادئة سيئة تؤدي إلى كسر قواعد بناء الجملة. لا ينبغي تعديل هذه على الإطلاق.
يتم تجاهل E265
، الذي يشير إلى التباعد بعد تجزئة التعليق، إذا كان التعليق يشبه الكود. يتجنب autopep8 تعديل هذه التعليقات لأنها ليست تعليقات حقيقية. إذا كنت تريد حقًا التخلص من تحذير pycodestyle، فكر في إزالة الكود الذي تم التعليق عليه فقط. (يمكن أتمتة ذلك من خلال الاستئصال.)
بشكل افتراضي، يقوم autopep8 بإجراء تغييرات على المسافة البيضاء فقط. وبالتالي، بشكل افتراضي، لا يتم إصلاح E711
و E712
. (تغيير x == None
إلى x is None
قد يغير معنى البرنامج إذا تم تجاوز طريقة __eq__
الخاصة بـ x
.) كما أنه لا يصحح الكود المهمل W6
. لتمكين هذه الإصلاحات الأكثر قوة، استخدم الخيار --aggressive
:
$ autopep8 - العدوانية <اسم الملف>
استخدم عدة --aggressive
لزيادة مستوى العدوانية. على سبيل المثال، يتطلب E712
مستوى العدوانية 2 (نظرًا لأن x == True
يمكن تغييره إلى x
أو x is True
، لكن autopep8 يختار المستوى الأول).
- سوف يقوم --aggressive
أيضًا بتقصير الخطوط بقوة أكبر. سيؤدي أيضًا إلى إزالة المسافات البيضاء الزائدة بقوة أكبر. (عادة، لا نلمس مسافة بيضاء زائدة في سلاسل المستندات والسلاسل الأخرى متعددة الأسطر. ولإجراء تغييرات أكثر قوة على سلاسل المستندات، استخدم docformatter.)
لتمكين مجموعة فرعية فقط من الإصلاحات، استخدم خيار --select
. على سبيل المثال، لإصلاح أنواع مختلفة من مشكلات المسافة البادئة:
$ autopep8 --select=E1,W1 <اسم الملف>
إذا كان الملف الذي يتم إصلاحه كبيرًا، فقد ترغب في تمكين رسائل التقدم المطولة:
$ autopep8 -v <اسم الملف>
يؤدي المرور --experimental
إلى تمكين الوظائف التالية:
تقصير سطور التعليمات البرمجية مع مراعاة طولها
$ autopep8 - <اسم الملف> التجريبي
من الممكن تعطيل autopep8 حتى يتم تشغيله مرة أخرى في الملف، وذلك باستخدام autopep8: off
ثم إعادة التمكين باستخدام autopep8: on
.
# autopep8: إيقاف[ [23، 23، 13، 43]، [32، 34، 34، 34]، [56، 34، 34، 11]، [10، 10، 10، 10]، ]# autopep8: تشغيل
fmt: off
و fmt: on
صالحان أيضًا.
إن أبسط طريقة لاستخدام autopep8 كوحدة هي عبر الدالة fix_code()
:
>>> استيراد autopep8 >>> autopep8.fix_code('x=123n') 'س = 123ن'
أو مع الخيارات:
>>> استيراد autopep8 >>> autopep8.fix_code('print( 123 )n', ... الخيارات={'تجاهل': ['E']}) 'اطبع (123) ن'
افتراضيًا، في حالة وجود $HOME/.config/pycodestyle
( ~.pycodestyle
في بيئة Windows)، سيتم استخدامه كملف تكوين عام. وبدلاً من ذلك، يمكنك تحديد ملف التكوين العام باستخدام خيار --global-config
.
وأيضًا، في حالة وجود ملفات setup.cfg
و tox.ini
و .pep8
و .flake8
في الدليل الذي يوجد به الملف الهدف، فسيتم استخدامه كملف تكوين.
يمكن استخدام pep8
و pycodestyle
و flake8
كقسم.
مثال ملف التكوين:
[نمط باي كود] الحد الأقصى لطول الخط = 120 تجاهل = E501
يمكن لـ autopep8 أيضًا استخدام pyproject.toml
. يجب أن يكون القسم [tool.autopep8]
، وأن يكون لـ pyproject.toml
الأسبقية على أي ملفات تكوين أخرى.
مثال ملف التكوين:
[tool.autopep8] الحد الأقصى لطول الخط = 120 تجاهل = "E501,W6" # أو ["E501"، "W6"] في المكان = صحيح العودية = صحيح العدوانية = 3
يمكن استخدام autopep8 كخطاف للالتزام المسبق.
لإضافة autopep8 كمكون إضافي، قم بإضافة تعريف الريبو هذا إلى التكوين الخاص بك:
اتفاقيات إعادة الشراء: - الريبو: https://github.com/hhatto/autopep8rev: ... # حدد العلامة أو المراجعة التي تريدها، أو قم بتشغيل خطافات التحديث التلقائي قبل الالتزام: - المعرف: autopep8
حالات الاختبار موجودة في test/test_autopep8.py
. يمكن تشغيلها مباشرة عبر python test/test_autopep8.py
أو عبر tox. هذا الأخير مفيد للاختبار ضد العديد من مترجمي بايثون. (نقوم حاليًا باختبار إصدارات CPython 3.8 و3.9 و3.10 و3.11 و3.12. كما نقوم باختبارها أيضًا ضد PyPy.)
يتوفر اختبار واسع النطاق عبر test/acid.py
. يقوم هذا البرنامج النصي بتشغيل autopep8 مقابل كود Python والتحقق من صحة واكتمال إصلاحات الكود. يمكنه التحقق من بقاء الرمز الثانوي متطابقًا. يستخدم test/acid_pypi.py
موقع acid.py
للاختبار مقابل أحدث الحزم التي تم إصدارها على PyPI.
pkg_resources.DistributionNotFound
إذا كنت تستخدم إصدارًا قديمًا من setuptools
، فقد تواجه pkg_resources.DistributionNotFound
عند محاولة تشغيل autopep8
. حاول ترقية setuptools
لحل مشكلة setuptools
هذه:
$ تثبيت النقطة - ترقية أدوات الإعداد
استخدم sudo
إذا كنت تقوم بالتثبيت على النظام.
بايبي
جيثب
كوديكوف