আমি পাইথন সম্পর্কে অভিজ্ঞ নই, তাই আমার কথায় যদি কোনও ভুল থাকে তবে কেবল আমাকে বলুন। আপনার ফাইলের শ্রেণিবিন্যাস যদি এভাবে সাজানো থাকে:
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
আমি মনে করি এটি প্রজেক্ট ফাইল শ্রেণিবিন্যাসের নীতিের সাথে মিলে যায়, আপনার বিভিন্ন ফোল্ডারে বিভিন্ন ফাংশন সহ মডিউলগুলি সাজানো উচিত এবং কেবল বাইরে একটি কলার রেখে দেওয়া উচিত এবং আপনি কখন চান তা আমদানি করতে পারেন।