আমি পাইথন সম্পর্কে অভিজ্ঞ নই, তাই আমার কথায় যদি কোনও ভুল থাকে তবে কেবল আমাকে বলুন। আপনার ফাইলের শ্রেণিবিন্যাস যদি এভাবে সাজানো থাকে:
project\
module_1.py
module_2.py
module_1.py
একটি ফাংশন বলা সংজ্ঞায়িত func_1()
, module_2.py :
from module_1 import func_1
def func_2():
func_1()
if __name__ == '__main__':
func_2()
এবং আপনি python module_2.py
সেমিডিতে চালাবেন , এটি যা func_1()
সংজ্ঞায়িত করবে তা চালানো হবে । সাধারণত আমরা একই শ্রেণিবিন্যাস ফাইলগুলি আমদানি করি। কিন্তু যখন আপনি লিখতে from .module_1 import func_1
মধ্যে module_2.py
, পাইথন ইন্টারপ্রেটার বলবে No module named '__main__.module_1'; '__main__' is not a package
। সুতরাং এটি ঠিক করার জন্য, আমরা কেবলমাত্র আমাদের পরিবর্তনটি রেখেছি এবং মডিউল উভয়টিকে একটি প্যাকেজে সরিয়ে নিয়েছি, এবং কলার হিসাবে তৃতীয় মডিউল তৈরি করি module_2.py
।
project\
package_1\
module_1.py
module_2.py
main.py
main.py :
from package_1.module_2 import func_2
def func_3():
func_2()
if __name__ == '__main__':
func_3()
কিন্তু কারণ আমরা একটি যোগ .
সামনে module_1
এ module_2.py
যে যদি আমরা যে এবং চালানোর না হয় main.py
, পাইথন ইন্টারপ্রেটার বলবে No module named 'module_1'
, যে একটি সামান্য চতুর এর module_1.py
ডান পাশে হয় module_2.py
। এখন আমি দিন func_1()
মধ্যে module_1.py
কি কিছু:
def func_1():
print(__name__)
যে __name__
রেকর্ডগুলি কে ফানকে কল করে। এখন আমরা .
আগে রাখি module_1
, চালান main.py
, এটি মুদ্রণ করবে package_1.module_1
, না module_1
। এটি ইঙ্গিত করে যে যিনি ডাকেন func_1()
তিনি হলেন একই শ্রেণিবিন্যাসের মতো main.py
, .
বোঝানো যা নিজের module_1
মতো একই শ্রেণিবিন্যাসে module_2.py
। সুতরাং যদি কোনও বিন্দু না থাকে তবে নিজের মতো একই শ্রেণিবিন্যাসে main.py
স্বীকৃতি module_1
জানাতে পারে, এটি সনাক্ত করতে পারে package_1
তবে এটি "অধীন" কী তা নয়।
এখন এটি কিছুটা জটিল করে তুলি। আপনার একটি config.ini
এবং একটি মডিউল একটি ফাংশনটিকে একই মস্তিষ্কে 'মেইন.পি' হিসাবে পড়তে সংজ্ঞায়িত করে।
project\
package_1\
module_1.py
module_2.py
config.py
config.ini
main.py
এবং কিছু অনিবার্য কারণে, আপনাকে এটির সাথে কল করতে হবে module_2.py
, সুতরাং এটি উপরের স্তরক্রম থেকে আমদানি করতে হবে। মডিউল_পিপি :
import ..config
pass
দুটি বিন্দু মানে উপরের স্তরক্রম থেকে আমদানি করা (তিনটি বিন্দু উপরের থেকে উপরের অ্যাক্সেস ইত্যাদি) and এখন আমরা চালাতে main.py
, অনুবাদক বলবেঃ ValueError:attempted relative import beyond top-level package
। এখানে "শীর্ষ স্তরের প্যাকেজ" রয়েছে main.py
। কেবল config.py
পাশে থাকার কারণে main.py
, তারা একই শ্রেণিবিন্যাসে রয়েছে, config.py
"অধীনে" নয় main.py
, বা এটি "নেতৃত্বাধীন" নয় main.py
, তাই এটি অতিক্রম করে main.py
। এটি ঠিক করার জন্য, সহজতম উপায় হ'ল:
project\
package_1\
module_1.py
module_2.py
config.py
config.ini
main.py
আমি মনে করি এটি প্রজেক্ট ফাইল শ্রেণিবিন্যাসের নীতিের সাথে মিলে যায়, আপনার বিভিন্ন ফোল্ডারে বিভিন্ন ফাংশন সহ মডিউলগুলি সাজানো উচিত এবং কেবল বাইরে একটি কলার রেখে দেওয়া উচিত এবং আপনি কখন চান তা আমদানি করতে পারেন।