يقوم autopep8 تلقائيًا بتنسيق كود Python ليتوافق مع دليل نمط PEP 8. يستخدم الأداة المساعدة pycodestyle لتحديد أجزاء التعليمات البرمجية التي تحتاج إلى تنسيق. autopep8 قادر على إصلاح معظم مشكلات التنسيق التي يمكن الإبلاغ عنها بواسطة pycodestyle.
محتويات
pkg_resources.DistributionNotFound
من النقطة:
تثبيت النقطة $ - ترقية autopep8
فكر في استخدام خيار --user
.
يتطلب autopep8 pycodestyle.
لتعديل ملف في مكانه (بالمستوى العدواني 2):
$ autopep8 --in-place --aggressive --aggressive
قبل تشغيل autopep8.
import math , sys ;
def example1 ():
####This is a long comment. This should be wrapped to fit within 72 characters.
some_tuple = ( 1 , 2 , 3 , 'a' );
some_variable = { 'long' : 'Long code lines should be wrapped within 79 characters.' ,
'other' :[ math . pi , 100 , 200 , 300 , 9876543210 , 'This is a long string that goes on' ],
'more' :{ 'inner' : 'This whole logical line should be wrapped.' , 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 should have a space after the hash.
if bar : bar += 1 ; bar = bar * bar ; return bar
else :
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
return ( sys . path , some_string )
بعد تشغيل autopep8.
import math
import sys
def example1 ():
# This is a long comment. This should be wrapped to fit within 72
# characters.
some_tuple = ( 1 , 2 , 3 , 'a' )
some_variable = {
'long' : 'Long code lines should be wrapped within 79 characters.' ,
'other' : [
math . pi ,
100 ,
200 ,
300 ,
9876543210 ,
'This is a long string that goes on' ],
'more' : {
'inner' : 'This whole logical line should be wrapped.' ,
some_tuple : [
1 ,
20 ,
300 ,
40000 ,
500000000 ,
60000000000000000 ]}}
return ( some_tuple , some_variable )
def example2 (): return ( '' in { 'f' : 2 }) in { 'has_key() is deprecated' : True }
class Example3 ( object ):
def __init__ ( self , bar ):
# Comments should have a space after the hash.
if bar :
bar += 1
bar = bar * bar
return bar
else :
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
return ( sys . path , some_string )
خيارات:
الاستخدام: autopep8 [-h] [--version] [-v] [-d] [-i] [--اسم ملف التكوين العالمي] [--تجاهل التكوين المحلي] [-r] [-jn] [-pn] [-a] [--تجريبي] [--استبعاد الكرات] [--إصلاحات القائمة] [--تجاهل الأخطاء] [--حدد الأخطاء] [--أقصى طول سطر n] [--خط خط النطاق] [--إغلاق الإغلاق] [-رمز الخروج] [ملفات [ملفات...]] يقوم تلقائيًا بتنسيق كود Python ليتوافق مع دليل نمط PEP 8. الحجج الموضعية: الملفات لتنسيقها أو "-" للمعيار في الحجج الاختيارية: -h, --help في إظهار رسالة المساعدة هذه والخروج --version إظهار رقم إصدار البرنامج والخروج -v، --verbose طباعة الرسائل المطولة؛ متعددة -v يؤدي إلى المزيد رسائل مطولة -d, --diff قم بطباعة الفرق للمصدر الثابت -i, --in-place قم بإجراء تغييرات على الملفات الموجودة --اسم ملف التكوين العالمي المسار إلى ملف التكوين العام pep8؛ إذا كان هذا الملف يفعل غير موجود ثم يتم تجاهل هذا (الافتراضي: ~/.config/pep8) --تجاهل التكوين المحلي لا تبحث عن ملفات التكوين المحلية وتطبيقها؛ إذا لم يكن كذلك تم تمريره، ويتم تحديث الإعدادات الافتراضية بأية ملفات تكوين موجودة الدليل الجذر للمشروع -r, --recursive يتم تشغيله بشكل متكرر عبر الدلائل؛ يجب أن تستخدم مع --في المكان أو --diff -jn، --jobs n عدد الوظائف الموازية؛ تطابق عدد وحدة المعالجة المركزية إذا كانت القيمة أقل من 1 -pn، --pep8-يمر ن الحد الأقصى لعدد تمريرات 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 <اسم الملف>
استخدم عدة --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: off
[
[ 23 , 23 , 13 , 43 ],
[ 32 , 34 , 34 , 34 ],
[ 56 , 34 , 34 , 11 ],
[ 10 , 10 , 10 , 10 ],
]
# autopep8: on
fmt: off
و fmt: on
صالحان أيضًا.
إن أبسط طريقة لاستخدام autopep8 كوحدة هي عبر الدالة fix_code()
:
>>> import autopep8 >>> autopep8.fix_code( ' x= 123 n ' ) 'x = 123n'
أو مع الخيارات:
>>> import autopep8 >>> autopep8.fix_code( ' print( 123 ) n ' , ... options = { ' ignore ' : [ ' E ' ]}) 'print( 123 )n'
افتراضيًا، في حالة وجود $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 كمكون إضافي، قم بإضافة تعريف الريبو هذا إلى التكوين الخاص بك:
repos :
- repo : https://github.com/hhatto/autopep8
rev : ... # select the tag or revision you want, or run `pre-commit autoupdate`
hooks :
- id : autopep8
حالات الاختبار موجودة في test/test_autopep8.py
. يمكن تشغيلها مباشرة عبر python test/test_autopep8.py
أو عبر tox. هذا الأخير مفيد للاختبار ضد العديد من مترجمي بايثون. (نقوم حاليًا باختبار الإصدارات 3.8 و3.9 و3.10 و3.11 و3.12 من CPython. ونقوم أيضًا باختبار PyPy.)
يتوفر اختبار واسع النطاق عبر test/acid.py
. يقوم هذا البرنامج النصي بتشغيل autopep8 مقابل كود Python والتحقق من صحة واكتمال إصلاحات الكود. يمكنه التحقق من أن الرمز الثانوي يظل متطابقًا. يستخدم test/acid_pypi.py
موقع acid.py
للاختبار مقابل أحدث الحزم التي تم إصدارها على PyPI.
pkg_resources.DistributionNotFound
إذا كنت تستخدم إصدارًا قديمًا من setuptools
، فقد تواجه pkg_resources.DistributionNotFound
عند محاولة تشغيل autopep8
. حاول ترقية setuptools
لحل مشكلة setuptools
هذه:
$ تثبيت النقطة - ترقية أدوات الإعداد
استخدم sudo
إذا كنت تقوم بالتثبيت على النظام.