software - python tutorial pdf




খারাপ ম্যাজিক নম্বর ত্রুটি কি? (8)

"Bad magic number" ত্রুটিটি যদি আপনি নিজের ফাইলটি এক্সটেনশান .pyc সহ ম্যানুয়ালি নামে নামকরণ করেন তবেও ঘটে

পাইথন এ "ইম্পোর্ট ইরাক" "খারাপ ম্যাজিক নম্বর" এবং আমি কীভাবে এটি ঠিক করব?

অনলাইনে পাওয়া যায় এমন একমাত্র জিনিস এটি একটি .py -> .pyc ফাইল সংকলন করে এবং তারপর এটি পাইথনের ভুল সংস্করণটি ব্যবহার করার চেষ্টা করে। আমার ক্ষেত্রে যাইহোক, ফাইলটি কিছু সময় জরিমানা আমদানি করে তবে অন্যদের নয় বলে মনে হয় এবং কেন আমি নিশ্চিত নই।

ট্রেসব্যাকে সরবরাহ করা তথ্য পাইথন বিশেষভাবে সহায়ক নয় (এই জন্যই আমি এখানে জিজ্ঞাসা করছিলাম ...), তবে এখানে এটি যদি সহায়তা করে তবে এখানে:

Traceback (most recent call last):
  File "run.py", line 7, in <module>
    from Normalization import Normalizer

Python3 জেনারেট করা *.pyc সহ .pyc ফাইল লোড হচ্ছে এই ত্রুটিটিও।


আমি খুব পুরনো (1.5.2) বাস্তবায়ন ব্যবহার করে খারাপ যাদু নম্বর ত্রুটির একটি অদ্ভুত ক্ষেত্রে ছিল। আমি একটি .pyo ফাইল উত্পন্ন এবং যে ত্রুটি ট্রিগার। বিজোড়ভাবে, সমস্যাটি মডিউলটির নাম পরিবর্তন করে সমাধান করা হয়েছিল। আপত্তিজনক নাম sms.py ছিল। যদি আমি সেই মডিউল থেকে sms.pyo তৈরি করি, তবে খারাপ যাদু নম্বর ত্রুটিটি ছিল ফলাফল। যখন আমি smst.py নাম পরিবর্তন করেছি, ত্রুটিটি চলে গেছে। আমি sms.py কে একই নামের সাথে অন্য কোনও মডিউলের সাথে হস্তক্ষেপ করে কিনা তা দেখার জন্য আবার এবং আরও চেক করেছিলাম তবে আমি কোনও নাম সংঘর্ষের সন্ধান পাইনি। যদিও এই সমস্যার উত্স আমার জন্য একটি mistery রয়ে গেছে, আমি একটি মডিউল নাম পরিবর্তন চেষ্টা করার সুপারিশ।


আমি ফেডারোরা ২6 এর সাথে একই সমস্যাটি মোকাবেলা করেছি যেখানে ছয়টি খারাপ ম্যাজিক নম্বরের কারণে ডিএনএফ হিসাবে অনেক সরঞ্জাম ভাঙ্গা হয়েছিল। অজানা কারণে আমি একটি ফাইল /usr/bin/six.pyc পেয়েছি, অপ্রত্যাশিত যাদু নম্বরের সাথে। এই ফাইল মুছে ফেলার সমস্যাটি সমাধান করুন


এটি উপরের তুলনায় অনেক বেশি কার্যকর।

find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf

যেখানে {directory-of-.pyc-files} ডিরেক্টরিটি রয়েছে যা {directory-of-.pyc-files} পাইথন ফাইল ধারণ করে।


এটি ডিরেক্টরি থেকে __init__.py ফাইল অনুপস্থিত হওয়ার কারণেও হতে পারে। ইউনিট পরীক্ষাগুলি একাধিক ফাইলে __init__.py করার জন্য এবং __init__.py একটি নতুন ডিরেক্টরি তৈরি করে বলুন যদি সেগুলি একটি ডিরেক্টরিতে রাখে তবে আপনাকে নতুন তৈরি পরীক্ষার ডিরেক্টরির মধ্যে অন্যান্য সমস্ত ফাইলগুলির পাশে __init__.py ফাইলটি তৈরি করতে হবে। অন্যথায় এটি Traceback (most recent call last): File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python35\Lib\unittest\loader.py",line 153, in loadTestsFromName module = __import__(module_name) ImportError: bad magic number in 'APPNAME.tests': b'\x03\xf3\r\n' মতো ত্রুটি দিতে পারে Traceback (most recent call last): File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python35\Lib\unittest\loader.py",line 153, in loadTestsFromName module = __import__(module_name) ImportError: bad magic number in 'APPNAME.tests': b'\x03\xf3\r\n'


যদি আপনার সঠিক python27.dll ফাইল (Windows এর ক্ষেত্রে) এটি ঠিক করতে পারে তবে এটি ঠিক একই ডিল সংস্করণের সাথে পুনরায় ইনস্টল (বা এক্সট্র্যাক্ট) পাইথনটি সমাধান করতে। আমি একটি অনুরূপ অভিজ্ঞতা ছিল।


যাদু নম্বরটি ইউনিক্স-টাইপ সিস্টেম থেকে আসে যেখানে একটি ফাইলের প্রথম কয়েকটি বাইট একটি চিহ্নিতকারীকে ফাইল টাইপ নির্দেশ করে।

এটি তৈরি করে যখন পাইথন তার pyc ফাইলগুলিতে একটি অনুরূপ মার্কার রাখে।

তারপর পাইথন ইন্টারপ্রেটার নিশ্চিত করে যে এটি লোড করার সময় এই নম্বর সঠিক।

এই যাদু নম্বর ক্ষতি যে কিছু আপনার সমস্যা হতে হবে। এর মধ্যে pyc ফাইল সম্পাদনা করা বা আপনার ইন্টারপ্রেটারের চেয়ে অন্য একটি পাইথন (সাধারণত পরে) থেকে একটি pyc চালানোর চেষ্টা করা হয়েছে।

যদি তারা আপনার pyc ফাইল হয় তবে শুধু তাদের মুছুন এবং ইন্টারপ্রেটারটিকে pyc ফাইলগুলি পুনরায় কম্পাইল করতে দিন। ইউনিক্স টাইপ সিস্টেমে, যেটি সহজ হিসাবে কিছু হতে পারে:

rm *.pyc

বা:

find . -name '*.pyc' -delete

যদি তারা আপনার না হয়, তবে আপনাকে পুনরায় সংকলন, বা একটি ইন্টারপ্রেটারের জন্য pyc ফাইলগুলি পেতে হবে যা pyc ফাইলগুলিকে সেই বিশেষ যাদু মান দিয়ে চালাতে পারে।

অন্তর্মুখী প্রকৃতির হতে পারে যে এক জিনিস। সমস্যাটি সৃষ্টির যে pyc শুধুমাত্র নির্দিষ্ট অবস্থার অধীনে আমদানি করা যেতে পারে। এটা কখনও কখনও আমদানি করবে অত্যন্ত সম্ভাবনাময়। আমদানি ব্যর্থ হলে আপনি প্রকৃত সম্পূর্ণ স্ট্যাক ট্রেস পরীক্ষা করা উচিত?

একপাশে, আমার সব 2.5.1(r251:54863) pyc ফাইলের প্রথম শব্দ 62131 , 2.6.1(r261:67517) 62161 । সমস্ত জাদু সংখ্যার তালিকা Python/import.c পাওয়া যেতে পারে, সম্পূর্ণতার জন্য এখানে পুনরুত্পাদন করা হয়েছে (বর্তমান পোস্টের উত্তর হিসাবে বর্তমান, এটি তখন থেকেই পরিবর্তিত হতে পারে):

1.5:   20121
1.5.1: 20121
1.5.2: 20121
1.6:   50428
2.0:   50823
2.0.1: 50823
2.1:   60202
2.1.1: 60202
2.1.2: 60202
2.2:   60717
2.3a0: 62011
2.3a0: 62021
2.3a0: 62011
2.4a0: 62041
2.4a3: 62051
2.4b1: 62061
2.5a0: 62071
2.5a0: 62081
2.5a0: 62091
2.5a0: 62092
2.5b3: 62101
2.5b3: 62111
2.5c1: 62121
2.5c2: 62131
2.6a0: 62151
2.6a1: 62161
2.7a0: 62171




python