පයිතන් 3.4 සහ පසුව, ඔබට ප්රභව ගොනුවකින් කෙලින්ම ආනයනය කළ හැකිය (ප්රලේඛනයට සබැඳිය) . මෙය සරලම විසඳුම නොවේ, නමුත් මම සම්පූර්ණත්වය සඳහා මෙම පිළිතුර ඇතුළත් කරමි.
මෙන්න උදාහරණයක්. පළමුව, ආනයනය කළ යුතු ගොනුව නම් කර ඇත foo.py
:
def announce():
print("Imported!")
ඉහත ගොනුව ආනයනය කරන කේතය, ප්රලේඛනයේ ඇති උදාහරණයෙන් බෙහෙවින් ආනුභාව ලත්:
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
foo = module_from_file("foo", "/path/to/foo.py")
if __name__ == "__main__":
print(foo)
print(dir(foo))
foo.announce()
ප්රතිදානය:
<module 'foo' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
විචල්ය නාමය, මොඩියුලයේ නම සහ ගොනු නාමය නොගැලපෙන බව සලකන්න. මෙම කේතය තවමත් ක්රියාත්මක වේ:
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
baz = module_from_file("bar", "/path/to/foo.py")
if __name__ == "__main__":
print(baz)
print(dir(baz))
baz.announce()
ප්රතිදානය:
<module 'bar' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
ක්රමයෙන් ආනයනය කරන මොඩියුලයන් පයිතන් 3.1 හි හඳුන්වා දී ඇති අතර මොඩියුල ආනයනය කරන ආකාරය පිළිබඳ වැඩි පාලනයක් ඔබට ලබා දෙයි. වැඩි විස්තර සඳහා ප්රලේඛනය වෙත යොමු වන්න.