সমস্ত আমদানি করা মডিউলগুলি কীভাবে গণনা করবেন?
যেমন আমি ['os', 'sys']এই কোডটি পেতে চাই :
import os
import sys
ipython --pylab) পাইথন ইন্টারপ্রেটারটি পূর্বনির্ধারিত মডিউলগুলি লোড করে চালু করা হয়। প্রশ্নটি রয়ে গেছে, কীভাবে
সমস্ত আমদানি করা মডিউলগুলি কীভাবে গণনা করবেন?
যেমন আমি ['os', 'sys']এই কোডটি পেতে চাই :
import os
import sys
ipython --pylab) পাইথন ইন্টারপ্রেটারটি পূর্বনির্ধারিত মডিউলগুলি লোড করে চালু করা হয়। প্রশ্নটি রয়ে গেছে, কীভাবে
উত্তর:
import sys
sys.modules.keys()
বর্তমান মডিউলটির জন্য সমস্ত আমদানি প্রাপ্তির একটি অনুমিতি কেবল globals()মডিউলগুলির জন্য পরিদর্শন করা হবে :
import types
def imports():
for name, val in globals().items():
if isinstance(val, types.ModuleType):
yield val.__name__
এটি স্থানীয় আমদানি, বা অ-মডিউল আমদানির মতো ফিরিয়ে দেবে না from x import y। নোট করুন যে এটির val.__name__ফলে আপনি যদি ব্যবহার করেন তবে আসল মডিউলটির নাম পাবেন import module as alias; পরিবর্তে যদি আপনি নামটি উপস্থাপন করেন তবে উত্পাদনের নাম দিন।
import numpy as npফিরে আসবে numpyএবং অন্য দুটি পরামর্শ ফিরে আসবে np।
name। স্ট্রিং উত্পন্ন করার জন্য যেমন ফলন বিবৃতি এখন যেখানে import numpy as npdo 'import %s as %s' % (val.__name__, name)
এর sys.modulesসাথে ছেদটি সন্ধান করুন globals:
import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
frozensetপরিবর্তে এখানে একটি ব্যবহার করতে পারেন ? - এখানে আমার 1-লাইনার:frozenset(imap(lambda name: modules[name], frozenset(modules) & frozenset(globals())))
fromকমান্ডটি ব্যবহার করে আমদানি করা মডিউলগুলি বের করে না । উদাহরণস্বরূপ বিবেচনা করুন from scipy.stats import norm। এটি আমাকে জানায় না যে normমডিউলটি আমদানি করা হয়েছে। কীভাবে এটি এতে যুক্ত করা যায়?
আপনি যদি স্ক্রিপ্টের বাইরে থেকে এটি করতে চান:
পাইথন 2
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
পাইথন ঘ
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.items():
print(name)
এটি myscript.py দ্বারা লোড করা সমস্ত মডিউল মুদ্রণ করবে।
.iteritems()করুন .items()এবং বন্ধনীগুলি
print [key for key in locals().keys()
if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
যাক আপনি গণিত এবং পুনরায় আমদানি করেছেন:
>>import math,re
এখন একই ব্যবহার দেখতে
>>print(dir())
আপনি যদি এটি আমদানির আগে এবং আমদানির পরে চালনা করেন তবে কেউ পার্থক্য দেখতে পাবে।
এটি আসলে এর সাথে বেশ ভাল কাজ করছে:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
এটি আমদানিযোগ্য মডিউল নাম সহ একটি তালিকা তৈরি করবে ।
এই কোডটি আপনার মডিউল দ্বারা আমদানি করা মডিউলগুলি তালিকাভুক্ত করে:
import sys
before = [str(m) for m in sys.modules]
import my_module
after = [str(m) for m in sys.modules]
print [m for m in after if not m in before]
আপনার কোডটি চালানোর জন্য কোনও নতুন সিস্টেমে কী বাহ্যিক মডিউল ইনস্টল করতে হবে তা যদি বার বার চেষ্টা না করে আপনি জানতে চান তবে এটি কার্যকর হবে।
এটি এ sysথেকে আমদানিকৃত মডিউল বা মডিউলগুলি তালিকাভুক্ত করবে না ।
@ লীলা থেকে চুরি করা (কোনও বিন্যাসের কারণে কোনও মন্তব্য করতে পারেনি), এটি মডিউলটির / পথ / এছাড়াও দেখায়:
#!/usr/bin/env python
import sys
from modulefinder import ModuleFinder
finder = ModuleFinder()
# Pass the name of the python file of interest
finder.run_script(sys.argv[1])
# This is what's different from @Lila's script
finder.report()
যা উত্পাদন করে:
Name File
---- ----
...
m token /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py
...
.. গ্রেপিংয়ের জন্য উপযুক্ত বা আপনার কী আছে। সতর্ক হোন, এটা দীর্ঘ!
আমি এই ক্ষেত্রে একটি তালিকা বোধগম্যতা ব্যবহার করতে চাই:
>>> [w for w in dir() if w == 'datetime' or w == 'sqlite3']
['datetime', 'sqlite3']
# To count modules of interest...
>>> count = [w for w in dir() if w == 'datetime' or w == 'sqlite3']
>>> len(count)
2
# To count all installed modules...
>>> count = dir()
>>> len(count)