forked from SVIG/python-bootcamp
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
import importlib.util
|
|||
|
|
import os
|
||
|
|
|
||
|
|
def get_module_size(module_name):
|
||
|
|
"""Get the total number of bytes in the cached .pyc file or .py file of a module or package.
|
||
|
|
|
||
|
|
Args:
|
||
|
|
module_name (str): The name of the module or package.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
int: The total number of bytes in the cached .pyc file or .py file.
|
||
|
|
"""
|
||
|
|
spec = importlib.util.find_spec(module_name)
|
||
|
|
|
||
|
|
if spec is not None and spec.has_location:
|
||
|
|
# If the module is found and has a location, check for .pyc file first
|
||
|
|
pyc_file_path = spec.origin + 'c'
|
||
|
|
if os.path.exists(pyc_file_path):
|
||
|
|
return os.stat(pyc_file_path).st_size
|
||
|
|
else:
|
||
|
|
# If .pyc file doesn't exist, check for .py file
|
||
|
|
py_file_path = spec.origin
|
||
|
|
if os.path.exists(py_file_path):
|
||
|
|
return os.stat(py_file_path).st_size
|
||
|
|
|
||
|
|
return 0 # Return 0 if no .pyc or .py file found
|
||
|
|
|
||
|
|
|
||
|
|
import sys
|
||
|
|
|
||
|
|
def get_total_module_size():
|
||
|
|
"""Get the total number of bytes for all modules listed in sys.modules.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
int: The total number of bytes for all modules.
|
||
|
|
"""
|
||
|
|
total_size = 0
|
||
|
|
for module_name in sys.modules:
|
||
|
|
module_size = get_module_size(module_name)
|
||
|
|
total_size += module_size
|
||
|
|
|
||
|
|
return total_size
|
||
|
|
|
||
|
|
if __name__ == '__main__' and __package__ is None:
|
||
|
|
__spec__ = importlib.util.spec_from_file_location('__main__', __file__)
|
||
|
|
total_size = get_total_module_size()
|
||
|
|
print("Total size of all modules in sys.modules: {} bytes".format(total_size))
|