আমি যদি CreateUser.py
প্রধান ব্যবহারকারী_ পরিচালন ডিরেক্টরিতে চলে যাই তবে আমি সহজেই ব্যবহার করতে পারি: import Modules.LDAPManager
আমদানি করতে LDAPManager.py
--- এটি কাজ করে।
দয়া করে, না । এইভাবে LDAPManager
ব্যবহৃত মডিউলটি অন্যান্য আমদানির মাধ্যমে আমদানিকৃতর মতো CreateUser
হবে না । মডিউলে বা পিকিং / আন-পিকিংয়ের সময় আপনার কিছু বিশ্বব্যাপী অবস্থা থাকলে এটি সমস্যা তৈরি করতে পারে। মডিউলটি একই ডিরেক্টরিতে ঘটে বলে কেবল কাজ করে এমন আমদানি এড়িয়ে চলুন ।
আপনার যদি প্যাকেজ কাঠামো থাকে তবে আপনার উচিত:
আপেক্ষিক আমদানি ব্যবহার করুন, যদি হয় CreateUser.py
তবে Scripts/
:
from ..Modules import LDAPManager
নোট করুন যে এটি ( অতীত কালটি নোট করুন ) পিইপি 8 দ্বারা নিরুৎসাহিত হয়েছিল কেবল কারণ পাইথনের পুরানো সংস্করণগুলি সেগুলি খুব ভালভাবে সমর্থন করে না, তবে এই সমস্যাটি বহু বছর আগেই সমাধান হয়েছিল। বর্তমান PEP 8 সংস্করণ নেই পরম আমদানির একটা গ্রহণযোগ্য বিকল্প হিসেবে তাদের সুপারিশ। আমি আসলে তাদের প্যাকেজগুলির মধ্যে পছন্দ করি।
পুরো প্যাকেজ নামটি ব্যবহার করে নিখুঁত আমদানি ব্যবহার করুন ( CreateUser.py
ইন Scripts/
):
from user_management.Modules import LDAPManager
দ্বিতীয়টির কাজ করার জন্য প্যাকেজটি user_management
ভিতরে থাকা উচিত PYTHONPATH
। বিকাশের সময় আপনি আইডিই কনফিগার করতে পারেন যাতে ম্যানুয়ালি sys.path.append
কোথাও কল যুক্ত না করে এটি ঘটে ।
এছাড়াও আমি এটি অদ্ভুত বলে মনে করি এটি Scripts/
একটি সাবপ্যাকেজ। একটি বাস্তব ইনস্টলেশন কারণ user_management
মডিউল অধীনে স্থাপন করা হবে site-packages
পাওয়া lib/
ডিরেক্টরি (যেটা আপনার সিস্টেমের OS এ লাইব্রেরি ইনস্টল করার জন্য ব্যবহৃত হয়), স্ক্রিপ্ট একটি অধীনে ইনস্টল করা উচিত যখনbin/
ডিরেক্টরি (যেটা আপনার OS জন্য এক্সেকিউটেবল রয়েছে)।
আসলে আমি বিশ্বাস করি Script/
এমনকি এর অধীনে থাকা উচিত নয় user_management
। এটি একই স্তরের হওয়া উচিত user_management
। এইভাবে আপনাকে ব্যবহার করতে হবে না-m
, তবে আপনাকে কেবল প্যাকেজটি পাওয়া যাবে কিনা তা নিশ্চিত করতে হবে (এটি আবার আইডিই কনফিগার করার বিষয়টি, প্যাকেজটি সঠিকভাবে ইনস্টল করার বা PYTHONPATH=. python Scripts/CreateUser.py
সঠিক পথের সাথে স্ক্রিপ্টগুলি চালু করার ক্ষেত্রে)।
সংক্ষেপে, আমি যে স্তরক্রমটি ব্যবহার করব তা হ'ল:
user_management (package)
|
|------- __init__.py
|
|------- Modules/
| |
| |----- __init__.py
| |----- LDAPManager.py
| |----- PasswordManager.py
|
Scripts/ (*not* a package)
|
|----- CreateUser.py
|----- FindUser.py
তারপরে CreateUser.py
এবং FindUser.py
মডিউলগুলি আমদানি করার জন্য নিখুঁত আমদানিগুলির কোড ব্যবহার করা উচিত:
from user_management.Modules import LDAPManager
ইনস্টলেশন চলাকালীন আপনি নিশ্চিত করে নিন যে এক্সিকিউটেবলের জন্য ডিরেক্টরিটির ভিতরে user_management
কোথাও এবং PYTHONPATH
স্ক্রিপ্টগুলি শেষ হয় যাতে তারা মডিউলগুলি সন্ধান করতে সক্ষম হয়। উন্নয়ন সময় আপনি হয় আইডিই কনফিগারেশনের উপর নির্ভর করে, অথবা আপনি লঞ্চ CreateUser.py
যোগ Scripts/
করার পেরেন্ট ডাইরেক্টরি PYTHONPATH
(আমি যে ডিরেক্টরি উভয় রয়েছে অর্থ user_management
ও Scripts
):
PYTHONPATH=/the/parent/directory python Scripts/CreateUser.py
অথবা আপনি PYTHONPATH
বিশ্বব্যাপী পরিবর্তন করতে পারেন যাতে প্রতিবার এটি নির্দিষ্ট করতে না হয়। ইউনিক্স ওএসে (লিনাক্স, ম্যাক ওএস এক্স ইত্যাদি) আপনি PYTHONPATH
বাহ্যিক ভেরিয়েবল সংজ্ঞায়িত করতে শেল স্ক্রিপ্টগুলির একটি পরিবর্তন করতে পারেন , উইন্ডোজে আপনাকে পরিবেশগত পরিবর্তনশীল সেটিংস পরিবর্তন করতে হবে।
অ্যাডেন্ডাম আমি বিশ্বাস করি, আপনি যদি পাইথন 2 ব্যবহার করেন তবে এটি প্রয়োগ করে অন্তর্নিহিত আপেক্ষিক আমদানি এড়ানো নিশ্চিত করা আরও ভাল:
from __future__ import absolute_import
আপনার মডিউলগুলির শীর্ষে। এইভাবে import X
সর্বদা শীর্ষস্থানীয় মডিউলটি আমদানি করার অর্থ X
এবং কখনও X.py
একই ডিরেক্টরিতে থাকা ফাইলটি আমদানির চেষ্টা করবে না (যদি ডিরেক্টরিটি সেই ডিরেক্টরিতে না থাকে PYTHONPATH
)। এইভাবে আপেক্ষিক আমদানি করার একমাত্র উপায় হ'ল সুস্পষ্ট সিনট্যাক্স (দ্য from . import X
) ব্যবহার করা, যা ভাল ( স্পষ্টকৃতের চেয়ে স্পষ্টতই ভাল )।
এটি নিশ্চিত করবে যে আপনি কখনই "বোগাস" অন্তর্নিহিত আপেক্ষিক আমদানি ব্যবহার করবেন না, যেহেতু এগুলি ImportError
স্পষ্টভাবে ইঙ্গিত দেয় যে কোনও কিছু ভুল। অন্যথায় আপনি এমন একটি মডিউল ব্যবহার করতে পারেন যা এটি আপনার মনে হয়।
python -m user_management.Scripts.CreateUser