update
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import os
|
||||
import sys
|
||||
import importlib.util
|
||||
import types
|
||||
|
||||
|
||||
def get_bytecode_size(module_name):
|
||||
"""Get the size of the cached .pyc bytecode file for a module."""
|
||||
spec = importlib.util.find_spec(module_name)
|
||||
if spec and spec.origin.endswith('.py'):
|
||||
pyc_file = importlib.util.cache_from_source(spec.origin)
|
||||
if os.path.exists(pyc_file):
|
||||
return os.path.getsize(pyc_file)
|
||||
return 0
|
||||
|
||||
|
||||
def get_dso_size(module_name):
|
||||
"""Get the size of the DSO (Dynamic Shared Object) module file for a module."""
|
||||
spec = importlib.util.find_spec(module_name)
|
||||
if spec and spec.origin.endswith(('.so', '.dll')):
|
||||
return os.path.getsize(spec.origin)
|
||||
return 0
|
||||
|
||||
|
||||
def generate_module_report():
|
||||
"""Generate a report summarizing the module environment."""
|
||||
total_modules = len(sys.modules)
|
||||
bytecode_size = sum(get_bytecode_size(module_name) for module_name in sys.modules)
|
||||
dso_size = sum(get_dso_size(module_name) for module_name in sys.modules)
|
||||
python_size = sum(
|
||||
sys.modules[module_name].__sizeof__()
|
||||
for module_name in sys.modules
|
||||
if isinstance(sys.modules[module_name], types.ModuleType)
|
||||
)
|
||||
total_size = bytecode_size + dso_size + python_size
|
||||
|
||||
# Calculate percentage of each type of module
|
||||
bytecode_percent = bytecode_size / total_size * 100
|
||||
dso_percent = dso_size / total_size * 100
|
||||
python_percent = python_size / total_size * 100
|
||||
|
||||
# Generate the report
|
||||
report = f"Total modules: {total_modules}\n"
|
||||
report += f"Total size: {total_size} bytes\n"
|
||||
report += f"Bytecode modules: {bytecode_percent:.2f}% ({bytecode_size} bytes)\n"
|
||||
report += f"DSO modules: {dso_percent:.2f}% ({dso_size} bytes)\n"
|
||||
report += f"Python code modules: {python_percent:.2f}% ({python_size} bytes)\n"
|
||||
|
||||
return report
|
||||
|
||||
if __name__ == '__main__' and __package__ is None:
|
||||
__spec__ = importlib.util.spec_from_file_location('__main__', __file__)
|
||||
report = generate_module_report()
|
||||
print(report)
|
||||
Reference in New Issue
Block a user