تبدیل کد های پایتون ۲ به ۳

به نام خدا

خیلی از کد های خوب پایتون در زمان پایتون ۲ نوشته شده اند. اگر شما هم برنامه ای با این ورژن از پایتون نوشتید،‌ باید آن را به پایتون ۳ انتقال بدهید. شاید بگویید این کار، کاری وقت گیر و سخت است. ولی اینطور نیست!

ماژولی وجود دارد به نام 2to3 که روش نصب آن در ادامه توضیح داده می شود. به وسیله این نرم افزار می توانید فایل پایتون ۲ خود را به پایتون ۳ تبدیل کنید!

نصب ماژول 2to3

این ماژول در برخی از سیستم عامل های لینوکسی مثل اوبونتو به طور پیشفرض نصب شده و می توانید با نام 2to3-2.7 به آن دسترسی داشته باشید.

برای نصب این ماژول می توانید دستور زیر را در خط فرمان سیستم عامل خود وارد کنید:

pip install 2to3

هم اکنون این نرم افزار قابل استفاده است.

نحوه استفاده از 2to3

1- اطلاع از تغییراتی که از تبدیل پایتون ۲ به ۳ به وجود میایند:

با دستور زیر که خروجی آن مثل diff در گیت است، می توانید تغییرات مورد نیاز برای تبدیل فایل از پایتون ۲ به ۳ را ببینید. ما در اینجا فایلی داریم به نام p2.py که می خواهیم این دستور را بر روی آن انجام دهیم.

محتوای p2.py:

print 'Py2'

الآن به دستورات زیر (و خروجی آن) نگاه کنید:

reza@reza:~/Documents$ 2to3 p2.py 
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored p2.py
--- p2.py	(original)
+++ p2.py	(refactored)
@@ -1 +1 @@
-print 'Py2'
+print('Py2')
RefactoringTool: Files that need to be modified:
RefactoringTool: p2.py

2- تغییر دادن فایل پایتون ۲ به پایتون ۳:

با فلگ w- می توانیم محتوای فایل پایتون ۲ را به پایتون ۳ تبدیل کنیم:

reza@reza:~/Documents$ 2to3 -w p2.py 
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored p2.py
--- p2.py	(original)
+++ p2.py	(refactored)
@@ -1 +1 @@
-print 'Py2'
+print('Py2')
RefactoringTool: Files that were modified:
RefactoringTool: p2.py

در دستور قبل، فقط تغییرات مورد نیاز نمایش داده می شدند؛ ولی در نتیجه این دستور، محتوای فایل پایتون ۲ تغییر کردند.

محتوای فایل p2.py:

print('Py2')

۳- fixer ها:

به کلماتی که این نرم افزار از طریق آن ها نیاز به تغییر را متوجه میشود، یعنی کلماتی که نحوه کار با آنها در پایتون ۲ متفاوت از پایتون ۳ است (مثل print)، fixer گفته می شود. برای اطلاع از fixer ها می توانید از دستور زیر استفاده کنید:

2to3 -l

۴- محدود کردن fixer های مورد استفاده در ترجمه:

ممکن است بخواهید بخشی از fixer ها را تغییر ندهید. می توانید fixer هایی که می خواهید تغییر یابند را مشخص کنید:

2to3 -f raw_input p2.py

به وسیله دستور بالا، به 2to3 می گوییم که فقط raw_input ها را تغییر بده. به دلیل اینکه فایل ما هیچ raw_inputـی ندارد، خروجی به شکل زیر خواهد بود:

RefactoringTool: No files need to be modified.

۵- محدود کردن fixer های مورد استفاده در ترجمه (بخش ۲):

در بند قبل، ما fixer هایی که می خواهیم استفاده شوند را مشخص کردیم. اگر بخواهید به 2to3 بگویید که از همه fixer ها استفاده کن به جز یک یا چند fixer خاص، می توانید از فلگ x- استفاده کنید:

2to3 -x print p2.py

دستور بالا، همه تغییرات را اعمال می کند به جز تابع print.

۶- ذخیره تغییرات فایل در یک فایل دیگر:

ممکن است بخواهید فایل پایتون ۲ بدون تغییر بماند و تغییرات در فایل دیگر ذخیره شوند. برای این کار باید از فلگ o- استفاده کنید که به دلیلی به فلگ n- نیاز دارد. همچنین به خاطر اینکه باید در فایل جدید چیزی بنویسد، باید از فلگ w- هم استفاده کنید:

reza@reza:~/Documents$ 2to3 -w -n -o ../Music/ p2.py 
lib2to3.main: Output in '../Music/' will mirror the input directory '' layout.
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored p2.py
--- p2.py	(original)
+++ p2.py	(refactored)
@@ -1 +1 @@
-print 'Py2'
+print('Py2')
RefactoringTool: Writing converted p2.py to ../Music/p2.py.
RefactoringTool: Files that were modified:
RefactoringTool: p2.py

در مثال بالا، تغییر یافته فایل p2.py در دایرکتوری Music ذخیره شد. البته با همان نام فایل مبدا. (در اینجا: p2.py)

امیدوارم که این مقاله نیازتان را برآورده باشد. ان شاء الله در مقاله ای دیگر، درباره برخی از fixer ها توضیحاتی داده خواهد شد.



منبع: مستندات پایتون