code: def run(self):
      # XXX copy_file by default preserves atime and mtime.  IMHO this is
      # the right thing to do, but perhaps it should be an option -- in
      # particular, a site administrator might want installed files to
      # reflect the time of installation rather than the last
      # modification time before the installed release.
  
      # XXX copy_file by default preserves mode, which appears to be the
      # wrong thing to do: if a file is read-only in the working
      # directory, we want it to be installed read/write so that the next
      # installation of the same module distribution can overwrite it
      # without problems.  (This might be a Unix-specific issue.)  Thus
      # we turn off 'preserve_mode' when copying to the build directory,
      # since the build directory is supposed to be exactly what the
      # installation will look like (ie. we preserve mode when
      # installing).
  
      # Two options control which modules will be installed: 'packages'
      # and 'py_modules'.  The former lets us work with whole packages, not
      # specifying individual modules at all; the latter is for
      # specifying modules one-at-a-time.
  
      if self.py_modules:
          self.build_modules()
      if self.packages:
          self.build_packages()
          self.build_package_data()
  
      self.byte_compile(self.get_outputs(include_bytecode=0))
  
imports: import os
  import importlib.util
  import sys
  import glob
  from ..core import Command
  from ..errors import DistutilsOptionError, DistutilsFileError
  from ..util import convert_path
  from distutils._log import log
label_desc: Use image node_id 3 for calling the build_py obj's underlying member method code with example usage: obj.run() without return types