বিজ্ঞপ্তি নির্ভরতা বুঝতে, আপনার মনে রাখতে হবে পাইথন মূলত একটি স্ক্রিপ্টিং ভাষা। বাইরের পদ্ধতির বিবৃতি কার্যকর করার সময় সংকলন ঘটে। আমদানি বিবৃতিগুলি পদ্ধতি কলগুলির মতোই কার্যকর করা হয় এবং সেগুলি বোঝার জন্য আপনার কাছে পদ্ধতি কলগুলির মতো তাদের সম্পর্কে চিন্তা করা উচিত।
আপনি যখন কোনও আমদানি করেন, তখন কী ঘটে তা নির্ভর করে আপনি যে ফাইলটি আমদানি করছেন তা ইতিমধ্যে মডিউল সারণীতে উপস্থিত রয়েছে কিনা depends এটি যদি করে, পাইথন বর্তমানে প্রতীক টেবিলের যা আছে তা ব্যবহার করে। যদি তা না হয়, পাইথন মডিউল ফাইলটি পড়া শুরু করে, সেখানে যা কিছু খুঁজে পায় তা সংকলন / সম্পাদন / আমদানি শুরু করে। সংকলনের সময় উল্লেখ করা সিম্বলগুলি পাওয়া গেছে বা না পাওয়া যায় তার উপর নির্ভর করে সেগুলি দেখা হয়েছে বা এখনও সংকলকটি এখনও দেখা যায়নি।
আপনার দুটি উত্স ফাইল রয়েছে তা কল্পনা করুন:
ফাইল এক্স.পি.
def X1:
return "x1"
from Y import Y2
def X2:
return "x2"
ফাইল Y.py
def Y1:
return "y1"
from X import X1
def Y2:
return "y2"
এখন ধরুন আপনি X.py ফাইলটি সংকলন করেছেন সংকলকটি X1 পদ্ধতিটি সংজ্ঞা দিয়ে শুরু হয় এবং তারপরে X.py এ আমদানি বিবৃতিতে আঘাত করে its এটি কম্পাইলারকে X.py সংকলন বিরতি দেয় এবং Y.py সংকলন শুরু করে causes এর খুব শীঘ্রই সংকলক Y.py. এ আমদানির বিবরণটিকে হিট করে যেহেতু এক্স.পি.পি ইতিমধ্যে মডিউল সারণীতে রয়েছে, পাইথন অনুরোধকৃত কোনও রেফারেন্স সন্তুষ্ট করতে বিদ্যমান অসম্পূর্ণ X.py প্রতীক টেবিলটি ব্যবহার করে। এক্স.পি.-তে আমদানি বিবরণের আগে উপস্থিত কোনও চিহ্ন এখন প্রতীক টেবিলের মধ্যে রয়েছে, তবে কোনও প্রতীক পরে নেই। যেহেতু এক্স 1 এখন আমদানির বিবরণীর আগে উপস্থিত হয়, এটি সফলভাবে আমদানি করা হয়। পাইথন তারপরে Y.py. সংকলন পুনরায় শুরু করে। এটি করার সাথে সাথে এটি Y2 সংজ্ঞায়িত করে এবং Y.py. সংকলন শেষ করে এরপরে এটি X.py এর সংকলনটি পুনরায় শুরু করে এবং Y.py প্রতীক টেবিলটিতে Y2 সন্ধান করে। সংকলন শেষ পর্যন্ত ডাব্লু / ও ত্রুটি সম্পূর্ণ করে।
যদি আপনি কমান্ড লাইন থেকে Y.py সংকলন করার চেষ্টা করেন তবে খুব আলাদা কিছু ঘটে। ওয়াই.পি. সংকলনের সময়, সংকলকটি ওয়াই 2 সংজ্ঞায়নের আগে আমদানির বিবরণটিকে হিট করে। তারপরে এটি X.py সংকলন শুরু করে। শীঘ্রই এটি X.py এ আমদানির বিবরণটিকে হিট করে যার জন্য ওয়াই 2 দরকার। তবে ওয়াই 2 অপরিবর্তিত, তাই সংকলন ব্যর্থ।
দয়া করে মনে রাখবেন যে আপনি Y1 আমদানি করতে X.py পরিবর্তন করে থাকলে, আপনি যে ফাইলটি সংকলন করেন তা নির্ধারণ করেই কম্পাইলটি সর্বদা সফল হবে। তবে আপনি যদি X2 চিহ্নটি আমদানি করতে Y.py ফাইলটি পরিবর্তন করেন তবে কোনও ফাইলই সংকলন করবে না।
মডিউল এক্স, বা এক্স দ্বারা আমদানি করা কোনও মডিউল বর্তমান মডিউলটি আমদানি করতে পারে যে কোনও সময়, ব্যবহার করবেন না:
from X import Y
যে কোনও সময় আপনি মনে করেন যে কোনও বৃত্তাকার আমদানি হতে পারে আপনার অন্য মডিউলগুলির মধ্যে ভেরিয়েবলগুলির সংকলন সময়ের উল্লেখগুলিও এড়ানো উচিত। নির্দোষ চেহারা কোড বিবেচনা করুন:
import X
z = X.Y
ধরুন মডিউল এক্স এই মডিউলটি এক্স আমদানির আগে এই মডিউলটি আমদানি করে Further তারপরে এই মডিউলটি আমদানি করার পরে ওয়াই সংজ্ঞায়িত হবে না এবং আপনি একটি সংকলন ত্রুটি পাবেন। যদি এই মডিউলটি প্রথমে Y আমদানি করে, আপনি এটিকে সাথে নিয়ে যেতে পারেন। কিন্তু যখন আপনার সহকর্মীদের মধ্যে একটি নির্দোষভাবে তৃতীয় মডিউলে সংজ্ঞার ক্রম পরিবর্তন করে, কোডটি ভেঙে যায়।
কিছু ক্ষেত্রে আপনি অন্য মডিউলগুলির দ্বারা প্রয়োজনীয় প্রতীক সংজ্ঞাগুলির নীচে আমদানির বিবৃতিটি সরিয়ে দিয়ে বিজ্ঞপ্তি নির্ভরতা সমাধান করতে পারেন। উপরের উদাহরণগুলিতে, আমদানির বিবৃতি দেওয়ার আগে সংজ্ঞাগুলি কখনই ব্যর্থ হয়। সংকলনের ক্রমের উপর নির্ভর করে আমদানি বিবরণের পরে সংজ্ঞাগুলি কখনও কখনও ব্যর্থ হয়। এমনকি আপনি কোনও ফাইলের শেষে আমদানি বিবৃতিও রাখতে পারেন, যতক্ষণ না সংকলনের সময় আমদানি করা চিহ্নগুলির কোনওটির প্রয়োজন হয় না।
নোট করুন যে কোনও মডিউলে আমদানির বিবৃতিগুলি নীচে নিয়ে যাওয়া আপনি যা করছেন তা অস্পষ্ট করে। আপনার মডিউলটির নীচের মত কিছুতে একটি মন্তব্যের সাথে এর জন্য ক্ষতিপূরণ দিন:
সাধারণভাবে এটি একটি খারাপ অভ্যাস, তবে কখনও কখনও এটি এড়ানো কঠিন।