আপনি যখন বর্তমান স্ক্রিপ্ট / প্যাকেজের সাথে সম্পর্কিত কোনও প্যাকেজ আমদানি করছেন তখন আপেক্ষিক আমদানি ঘটে।
উদাহরণস্বরূপ নিম্নলিখিত গাছটি বিবেচনা করুন:
mypkg
├── base.py
└── derived.py
এখন, আপনার derived.pyকিছু প্রয়োজন base.py। পাইথন 2 এ আপনি এটি (ইন derived.py) এর মতো করে করতে পারেন :
from base import BaseThing
পাইথন 3 আর সমর্থন করে না যেহেতু এটি আপনি 'আত্মীয়' বা 'পরম' চান কিনা তা স্পষ্ট নয় base। অন্য কথায়, baseসিস্টেমে যদি পাইথন প্যাকেজ ইনস্টলড থাকে তবে আপনি ভুলটি পেয়ে যাবেন।
পরিবর্তে এটির জন্য আপনাকে স্পষ্টত আমদানি ব্যবহার করতে হবে যা স্পষ্টভাবে কোনও পথের মতো ভিত্তিতে মডিউলটির অবস্থান নির্দিষ্ট করে। আপনার derived.pyমত দেখতে হবে:
from .base import BaseThing
নেতৃস্থানীয় .বলেছেন ' baseমডিউল ডিরেক্টরি থেকে আমদানি '; অন্য কথায়, .baseমানচিত্র ./base.py।
একইভাবে, এখানে ..উপসর্গ রয়েছে যা ডিরেক্টরি শ্রেণিবদ্ধের উপরে চলে আসে ../( ..modম্যাপিং সহ ../mod.py), এবং তারপরে ...যা দুটি স্তরে ( ../../mod.py) এবং আরও কিছু যায়।
তবে দয়া করে নোট করুন যে উপরে উল্লিখিত আপেক্ষিক পাথগুলি সেই ডিরেক্টরিতে আপেক্ষিক যেখানে বর্তমান মডিউল ( derived.py) বর্তমান কার্যনির্বাহী ডিরেক্টরি নয় not
@ ব্রেনবার্ন ইতিমধ্যে তারকা আমদানির বিষয়টি ব্যাখ্যা করেছে। সম্পূর্ণতার জন্য, আমি একই বলতে হবে;)।
উদাহরণস্বরূপ, আপনাকে কয়েকটি mathফাংশন ব্যবহার করতে হবে তবে আপনি সেগুলি কেবল একটি ফাংশনেই ব্যবহার করেন। পাইথন 2 এ আপনাকে আধা-অলস হওয়ার অনুমতি দেওয়া হয়েছিল:
def sin_degrees(x):
from math import *
return sin(degrees(x))
দ্রষ্টব্য যে এটি ইতিমধ্যে পাইথন 2 এ একটি সতর্কতা ট্রিগার করে:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
আধুনিক পাইথন 2 কোডে আপনার হওয়া উচিত এবং পাইথন 3 এ আপনাকে যা করতে হবে:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
বা:
from math import *
def sin_degrees(x):
return sin(degrees(x))