পাইথন সত্যিই বুদ্ধিমানভাবে সেট করার জন্য কঠোর চেষ্টা করে sys.path। এটি কীভাবে সেট করা আছে তা সত্যিই জটিল হয়ে উঠতে পারে । নিম্নলিখিত নির্দেশিকা একটি watered ডাউন, কিছুটা-অসম্পূর্ণ, কিছুটা-ভুল, কিন্তু আশা করছি-দরকারী সেখানে কি ঘটছে পাইথন পরিসংখ্যান কি হিসাবে ব্যবহার করার জন্য আউট যখন পদে-এবং-ফাইল পাইথন প্রোগ্রামার জন্য পথপ্রদর্শক হয় প্রাথমিক মান এর sys.path,
sys.executable, sys.exec_prefix, এবং sys.prefixএকটি সাধারণ
অজগর ইনস্টলেশন।
প্রথমত, অপারেটিং সিস্টেমটি যা বলে তার উপর ভিত্তি করে পাইথন তার স্তরটি ফাইল সিস্টেমের প্রকৃত শারীরিক অবস্থান নির্ধারণের জন্য সর্বোত্তমভাবে কাজ করে। যদি ওএস কেবল বলে "পাইথন" চলছে, তবে এটি নিজেকে $ PATH এ আবিষ্কার করবে। এটি কোনও প্রতীকী লিঙ্কগুলি সমাধান করে। একবার এটি হয়ে গেলে, নির্বাহযোগ্য যে পথটি এটি খুঁজে পায় এটি sys.executableকোনও আইএফএস, অ্যান্ডস বা বুটের মান হিসাবে ব্যবহৃত হয় ।
এর পরে, এটি sys.exec_prefixএবং এর
জন্য প্রাথমিক মানগুলি নির্ধারণ করে sys.prefix।
যদি pyvenv.cfgএকই ডিরেক্টরিতে sys.executableবা একটি ডিরেক্টরি হিসাবে
কোনও ফাইল কল করা থাকে, অজগর এটি দেখবে। বিভিন্ন ওএস এই ফাইলটি দিয়ে বিভিন্ন জিনিস করে।
এই কনফিগার ফাইলে যে মানগুলির মধ্যে পাইথন রয়েছে তার মধ্যে একটি হল কনফিগারেশন বিকল্প home = <DIRECTORY>। পাইথন এই ডিরেক্টরিটি ডিরেক্টরি পরিবর্তে ব্যবহার করবে sys.executable
যখন এটি গতিরূপে পরেটির প্রাথমিক মান সেট করে sys.prefix। যদি উইন্ডোজে ফাইলটিতে applocal = trueসেটিংটি উপস্থিত হয়
pyvenv.cfgতবে home = <DIRECTORY>সেটিংসটি নয়, তবে sys.prefixসেই ডিরেক্টরিতে সেট করা থাকবে sys.executable।
এরপরে, PYTHONHOMEপরিবেশের পরিবর্তনশীল পরীক্ষা করা হয়। লিনাক্স এবং ম্যাক এ,
sys.prefixএবং পরিবেশের পরিবর্তনশীলতে sys.exec_prefixসেট করা PYTHONHOMEথাকে যদি এটি উপস্থিত থাকে তবে যে কোনও সেটিংসকে ছাড়িয়ে যাবে । উইন্ডোজে
এবং পরিবেশের পরিবর্তনশীলতে সেট করা থাকে, যদি এটি উপস্থিত থাকে, যদি না কোনও সেটিং উপস্থিত থাকে তবে পরিবর্তে ব্যবহৃত হয়।home = <DIRECTORY>pyvenv.cfgsys.prefixsys.exec_prefixPYTHONHOMEhome = <DIRECTORY>pyvenv.cfg
অন্যথায়, এগুলি sys.prefixএবং sys.exec_prefixঅবস্থানের দিক থেকে পিছনে হেঁটে sys.executableবা যদি কোনও homeডিরেক্টরি দ্বারা প্রদত্ত ডিরেক্টরি খুঁজে পাওয়া যায় pyvenv.cfg।
যদি ফাইলটি lib/python<version>/dyn-loadডিরেক্টরিটি বা তার যে কোনও মূল ডিরেক্টরিতে পাওয়া যায়, তবে সেই ডিরেক্টরিটি sys.exec_prefixলিনাক্স বা ম্যাকের জন্য সেট করা আছে
। lib/python<version>/os.pyডিরেক্টরিতে বা এর কোনও উপ-ডিরেক্টরিতে যদি ফাইলটি
পাওয়া যায়, তবে সেই ডিরেক্টরিটি sys.prefixলিনাক্স, ম্যাক এবং উইন্ডোজে sys.exec_prefixসেট করা আছে, sys.prefixউইন্ডোজ হিসাবে একই মান হিসাবে সেট করা হবে
। যদি applocal = trueসেট করা থাকে তবে এই পুরো পদক্ষেপটি উইন্ডোজটিতে এড়িয়ে যায়
। হয় ডিরেক্টরি sys.executableব্যবহার করা হয় অথবা যদি homeসেট করা থাকে তবে এর pyvenv.cfgপরিবর্তে এর প্রাথমিক মান ব্যবহার করা হবে sys.prefix।
যদি এটি "ল্যান্ডমার্ক" ফাইলগুলি খুঁজে না পায় বা sys.prefixএখনও খুঁজে পাওয়া যায় না, তবে পাইথন sys.prefixএকটি "ফ্যালব্যাক" মান সেট করে। Linux এবং Mac, উদাহরণস্বরূপ, ব্যবহারের মান হিসাবে প্রাক কম্পাইল অক্ষমতা sys.prefixএবং sys.exec_prefix। উইন্ডোজটির sys.pathজন্য একটি ফ্যালব্যাক মান সেট করার জন্য পুরোপুরি অঙ্কিত
হওয়া অবধি অপেক্ষা করে sys.prefix।
তারপরে, (অজগর আপনি কীসের জন্য অপেক্ষা করছিলেন) অজগরটি অন্তর্ভুক্ত থাকা প্রাথমিক মানগুলি নির্ধারণ করে sys.path।
- পাইথনটি স্ক্রিপ্টের ডিরেক্টরিটিতে যুক্ত করা হয়েছে
sys.path। উইন্ডোজে এটি সর্বদা খালি স্ট্রিং, যা অজগরকে স্ক্রিপ্টের পরিবর্তে যেখানে অবস্থিত সেখানে পুরো পথটি ব্যবহার করতে বলে।
- পাইথনপথ এনভায়রনমেন্ট ভেরিয়েবলের বিষয়বস্তু যদি সেট করা থাকে তবে এতে যুক্ত করা হয়
sys.path, যদি না আপনি উইন্ডোজটিতে থাকেন এবং applocalসত্যে সেট না হয়ে থাকেন pyvenv.cfg।
<prefix>/lib/python35.zipলিনাক্স / ম্যাক এবং
os.path.join(os.dirname(sys.executable), "python.zip")উইন্ডোতে থাকা জিপ ফাইল পাথটি যুক্ত করা হয়েছে sys.path।
- যদি উইন্ডোতে এবং কোনও
applocal = trueসেট না করা থাকে pyvenv.cfg, তবে রেজিস্ট্রি কীর সাবকিগুলিগুলির বিষয়বস্তু
HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\যুক্ত করা হয়, যদি থাকে।
- যদি উইন্ডোজে এবং কোনও
applocal = trueসেট করা থাকে pyvenv.cfg, এবং sys.prefixখুঁজে পাওয়া যায় না, তবে রেজিস্ট্রি কীটির মূল বিষয়বস্তুHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ যুক্ত করা হয়, যদি তা বিদ্যমান থাকে;
- যদি উইন্ডোতে এবং কোনও
applocal = trueসেট না করা থাকে pyvenv.cfg, তবে রেজিস্ট্রি কীর সাবকিগুলিগুলির বিষয়বস্তু
HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\যুক্ত করা হয়, যদি থাকে।
- যদি উইন্ডোজে এবং কোনও
applocal = trueসেট করা থাকে pyvenv.cfg, এবং sys.prefixখুঁজে পাওয়া যায় না, তবে রেজিস্ট্রি কীটির মূল বিষয়বস্তুHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ যুক্ত করা হয়, যদি তা বিদ্যমান থাকে;
- যদি উইন্ডোজে, এবং পাইথনপথ সেট না করা থাকে, উপসর্গটি পাওয়া যায় নি, এবং কোনও রেজিস্ট্রি কী উপস্থিত ছিল না, তবে পাইথনপথের তুলনামূলক সময়ের সংকলন মান যুক্ত করা হয়; অন্যথায়, এই পদক্ষেপটি উপেক্ষা করা হবে।
- সংকলন-সময় ম্যাক্রো পাইথনপথের পাথগুলি গতিশীলভাবে পাওয়া-এর সাথে যুক্ত হয়েছে
sys.prefix।
- ম্যাক এবং লিনাক্সে, এর মান
sys.exec_prefixযুক্ত হয়। উইন্ডোজে, গতিশীলভাবে অনুসন্ধানের জন্য যে ডিরেক্টরিটি ব্যবহার করা হত (বা ব্যবহৃত হত) sys.prefixযুক্ত করা হয়েছে।
উইন্ডোজের এই পর্যায়ে, যদি কোনও উপসর্গ পাওয়া যায় না, তবে পাইথন ল্যান্ডমার্ক ফাইলগুলির জন্য সমস্ত ডিরেক্টরি অনুসন্ধান করে এটি নির্ধারণ করার চেষ্টা করবে sys.path, যেমন এটি sys.executableপূর্ববর্তী ডিরেক্টরিগুলির সাথে করার চেষ্টা করেছিল , যতক্ষণ না এটি কিছু খুঁজে পায়। যদি তা না sys.prefixহয় তবে ফাঁকা রেখে দেওয়া হয়।
সবশেষে, পাইথন siteমডিউলটি লোড করে , যা স্টাফটিকে আরও আরও যুক্ত করে sys.path:
এটি একটি মাথা এবং একটি পুচ্ছ অংশ থেকে চারটি ডিরেক্টরি নির্মাণ করে শুরু হয়। মাথার অংশের জন্য, এটি ব্যবহার করে sys.prefixএবং sys.exec_prefix; খালি মাথা বাদ দেওয়া হয়। লেজ অংশের জন্য, এটি খালি স্ট্রিং এবং তারপরে lib/site-packages(উইন্ডোজে) বা lib/pythonX.Y/site-packages
তারপরে lib/site-python(ইউনিক্স এবং ম্যাকিনটোসে) ব্যবহার করে। প্রতিটি পৃথক হেড-লেজ সংমিশ্রণের জন্য, এটি দেখতে পাবে যে এটি কোনও বিদ্যমান ডিরেক্টরিকে বোঝায় কিনা এবং যদি তা থাকে তবে এটি sys.path এ যুক্ত করে এবং কনফিগারেশন ফাইলগুলির জন্য নতুন যুক্ত হওয়া পথটিও পরীক্ষা করে।