উত্তর:
পাইথনপথ কীভাবে এটি কাজ করে না; পাইথনপথ শেলপাথ থেকে তার অনুসন্ধানের পথকে আলাদাভাবে আচরণ করে। আসুন বলি আমি এটি করি:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
পাইথনে এটি কাজ করবে ( sys.path
বর্তমান ডিরেক্টরি অন্তর্ভুক্ত করবে):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
তবে ডিরেক্টরিতে __init__.py
উপস্থিত থাকার সময় উপ-ডিরেক্টরিগুলি প্যাকেজ হিসাবে বিবেচিত হয় এবং পাইথনপথ দ্বারা উপেক্ষা করা হয়:
$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> import c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named c
সেই উপ-ডিরেক্টরিতে কিছু পেতে, এটি কাজ করবে:
>>> from pkg import c # Works
>>> import pkg.c # Works
আপনার পাইথনপথের প্রতিটি উপ-ডিরেক্টরি যেখানে যুক্ত করা হয় সেখানে কোনও সমাধান রোল করতে আপনার প্রতিটি ফোল্ডার স্পষ্টভাবে পাইথনপথ বা sys.path
প্রোগ্রামে যুক্ত করতে হবে। এই আচরণটি ইচ্ছাকৃত, এবং শেল PATH এর মতো কিছুই আচরণ করে না । এই ক্ষেত্রে প্যাকেজগুলির জন্য দোভাষীর সমর্থন দেওয়া, আপনি যা করছেন তার পরে সম্পাদন করার জন্য আরও ভাল উপায় কি?
পরিবেশ প্যাথ ভেরিয়েবলগুলি কীভাবে এটি কাজ করে না - আপনি এটিকে শীর্ষ-স্তরের ডিরেক্টরিটি সরবরাহ করেন এবং ডিরেক্টরি ট্রি প্রয়োজন হলে এটি পুনরুক্ত করার জন্য অ্যাপ্লিকেশনটি আপ।
অবশ্যই শেলটি ব্যবহার করে আপনার পাইথনপ্যাথ ভেরিয়েবলের সাথে ডিরেক্টরিটির উপ-ডিরেক্টরিগুলি যুক্ত করা সম্ভব। আমি বর্তমানে আমার .bashrc এ নিম্নলিখিতগুলির মতো কিছু ব্যবহার করছি:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
এটিতে আপনার ব্যবহারকারীর ফোল্ডারের সমস্ত সাব-ডাইরেক্টরিগুলিকে গাছের 2 গভীরতায় অন্তর্ভুক্ত করা হবে। ফাইন্ড কমান্ড ডিরেক্টরিগুলি ('-type d') সনাক্ত করে এবং নীচের sed এবং tr কমান্ডগুলি PATH ভেরিয়েবলগুলির স্বাভাবিক উপায়ে আউটপুটটিকে বিন্যাস করে।
'-ম্যাক্সডেপথ ২' ছাড়ার ফলে আপনার বাড়ির ফোল্ডারের সমস্ত সাব-ডাইরেক্টরি অন্তর্ভুক্ত থাকবে যা সম্ভবত অনুসন্ধানের জন্য যথেষ্ট। সম্ভবত এটি শুধুমাত্র আপনার $ হোম / সংগ্রহস্থল / পাইথন-স্টাফ ডিরেক্টরিতে করা উচিত।