পাইথন সত্যিই বুদ্ধিমানভাবে সেট করার জন্য কঠোর চেষ্টা করে 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.cfg
sys.prefix
sys.exec_prefix
PYTHONHOME
home = <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 এ যুক্ত করে এবং কনফিগারেশন ফাইলগুলির জন্য নতুন যুক্ত হওয়া পথটিও পরীক্ষা করে।