আপডেট 2018-11-28:
পাইথন 2 এবং 3 এর সাথে পরীক্ষাগুলির সংক্ষিপ্তসার এখানে
main.py - foo.py
foo.py চালায় - lib / bar.py
lib / bar.py চালায় - ফাইলপথ এক্সপ্রেশন মুদ্রণ করে
| Python | Run statement | Filepath expression |
|--------+---------------------+----------------------------------------|
| 2 | execfile | os.path.abspath(inspect.stack()[0][1]) |
| 2 | from lib import bar | __file__ |
| 3 | exec | (wasn't able to obtain it) |
| 3 | import lib.bar | __file__ |
পাইথন 2 এর জন্য, প্যাকেজগুলিতে স্যুইচ করা আরও পরিষ্কার হতে পারে যাতে এটি ব্যবহার করতে পারে from lib import bar
- কেবল __init__.py
দুটি ফোল্ডারে খালি ফাইল যুক্ত করুন ।
পাইথন 3 এর জন্য execfile
অস্তিত্ব নেই - নিকটতম বিকল্পটি হ'ল exec(open(<filename>).read())
যদিও এটি স্ট্যাক ফ্রেমগুলিকে প্রভাবিত করে। এটি কেবলমাত্র ব্যবহার করা সহজ import foo
এবং import lib.bar
- কোনও __init__.py
ফাইলের প্রয়োজন নেই।
আমদানি এবং সম্পাদনকারী মধ্যে পার্থক্য দেখুন
আসল উত্তর:
উইন্ডোজটিতে পাইথন ২.7.১০ সহ এই থ্রেডের উত্তরের উপর ভিত্তি করে এখানে একটি পরীক্ষা করা হয়েছে।
স্ট্যাক-ভিত্তিকগুলি কেবলমাত্র সেইগুলিই নির্ভরযোগ্য ফলাফল দেয়। শেষ দুটিতে সংক্ষিপ্ত বাক্য গঠন রয়েছে , -
print os.path.abspath(inspect.stack()[0][1]) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:\filepaths\lib
এগুলি ফাংশন হিসাবে sys যোগ করা হচ্ছে ! @ উসাগি এবং @ পাব্লগকে জমা দিন
নিম্নলিখিত তিনটি ফাইলের উপর ভিত্তি করে এবং এর ফোল্ডার থেকে মেইন.পি চালানো python main.py
(নিরঙ্কুশ পথগুলি দিয়ে পৃথকীকরণের চেষ্টা এবং একটি পৃথক ফোল্ডার থেকে কল করা)।
সি: \ ফাইলপথগুলি \ মূল.পি: execfile('foo.py')
সি: \ ফাইলপথগুলি oo foo.py: execfile('lib/bar.py')
সি: \ ফাইলপথগুলি \ লিব \ বার.পি:
import sys
import os
import inspect
print "Python " + sys.version
print
print __file__ # main.py
print sys.argv[0] # main.py
print inspect.stack()[0][1] # lib/bar.py
print sys.path[0] # C:\filepaths
print
print os.path.realpath(__file__) # C:\filepaths\main.py
print os.path.abspath(__file__) # C:\filepaths\main.py
print os.path.basename(__file__) # main.py
print os.path.basename(os.path.realpath(sys.argv[0])) # main.py
print
print sys.path[0] # C:\filepaths
print os.path.abspath(os.path.split(sys.argv[0])[0]) # C:\filepaths
print os.path.dirname(os.path.abspath(__file__)) # C:\filepaths
print os.path.dirname(os.path.realpath(sys.argv[0])) # C:\filepaths
print os.path.dirname(__file__) # (empty string)
print
print inspect.getfile(inspect.currentframe()) # lib/bar.py
print os.path.abspath(inspect.getfile(inspect.currentframe())) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # C:\filepaths\lib
print
print os.path.abspath(inspect.stack()[0][1]) # C:\filepaths\lib\bar.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:\filepaths\lib
print
__file__
গুণাবলী পরম বা আপেক্ষিক?