{"id":600,"library":"absl-py","title":"Abseil Python Common Libraries","description":"absl-py is a collection of Python library code for building Python applications, originating from Google's internal codebase. It provides essential utilities for application startup, a distributed command-line flags system, a custom logging module, and testing utilities. The library is actively maintained, with frequent releases, and is currently at version 2.4.0.","status":"active","version":"2.4.0","language":"python","source_language":"en","source_url":"https://github.com/abseil/abseil-py","tags":["utilities","cli","flags","logging","testing","google"],"install":[{"cmd":"pip install absl-py","lang":"bash","label":"Install stable version"}],"dependencies":[],"imports":[{"note":"Used for managing application lifecycle and parsing command-line flags. The main entry point is typically `app.run(main_function)`.","symbol":"app","correct":"from absl import app"},{"note":"Provides functions like `flags.DEFINE_string`, `flags.DEFINE_integer`, and `flags.FLAGS` to define and access command-line flags.","symbol":"flags","correct":"from absl import flags"},{"note":"Offers a custom logging module built on top of Python's standard logging, with features like various verbosity levels and conditional logging.","symbol":"logging","correct":"from absl import logging"},{"note":"The base class for Abseil-style Python tests, similar to `unittest.TestCase`.","symbol":"absltest","correct":"from absl.testing import absltest"},{"note":"A utility for testing code that relies on `absl.flags`, allowing flags to be temporarily overridden for test isolation.","symbol":"flagsaver","correct":"from absl.testing import flagsaver"}],"quickstart":{"code":"from absl import app\nfrom absl import flags\nfrom absl import logging\nimport os\n\nFLAGS = flags.FLAGS\n\nflags.DEFINE_string('greeting_target', 'World', 'The entity to greet.')\nflags.DEFINE_integer('repeat_count', 1, 'How many times to repeat the greeting.', lower_bound=1)\nflags.DEFINE_boolean('verbose', False, 'If true, print verbose output.')\n\ndef main(argv):\n  if FLAGS.verbose:\n    logging.set_verbosity(logging.DEBUG)\n    logging.debug('Verbose mode enabled. Non-flag arguments: %s', argv[1:])\n  else:\n    logging.set_verbosity(logging.INFO)\n\n  for _ in range(FLAGS.repeat_count):\n    logging.info('Hello, %s!', FLAGS.greeting_target)\n  \n  # Example of an argument passed directly, not as a flag\n  if len(argv) > 1:\n    logging.warning('Unrecognized positional arguments: %s', argv[1:])\n\nif __name__ == '__main__':\n  # To run: python your_script.py --greeting_target=User --repeat_count=3 --verbose\n  # Or with environment variable for testing:\n  # os.environ['greeting_target'] = 'TestUser'\n  # os.environ['repeat_count'] = '2'\n  # Then run: python your_script.py --verbose\n  app.run(main)\n","lang":"python","description":"This example demonstrates defining and using command-line flags, basic logging, and integrating with `absl.app.run()` to handle program execution. You can run this script and pass flags like `--greeting_target=Pythonista` or `--repeat_count=5`. The `os.environ` usage is for demonstrating how to programmatically set flags, especially useful in testing contexts where direct command-line arguments might not be feasible."},"warnings":[{"fix":"Ensure your Python environment is version 3.10 or newer to use the latest `absl-py` versions.","message":"Abseil Python has progressively dropped support for older Python versions. Version 2.4.0 dropped support for Python 3.8 and 3.9. Version 2.2.2 removed support for Python 3.7. Version 2.0.0 dropped support for Python 3.6.","severity":"breaking","affected_versions":"<2.4.0 (for Python 3.8/3.9), <2.2.2 (for Python 3.7), <2.0.0 (for Python 3.6)"},{"fix":"Always access the flag's value using the `.value` attribute: `if FLAGS.myflag.value:`.","message":"Directly evaluating `absl.flags.Flag` instances in a boolean context (e.g., `if FLAGS.myflag:`) will raise an error. This prevents accidental usage of the Flag object itself rather than its value.","severity":"gotcha","affected_versions":">=1.1.0"},{"fix":"If your code explicitly passes `exc_info` to `logging.exception`, ensure `absl-py` is version 2.0.0 or higher. Otherwise, verify behavior on older versions if `exc_info` is relied upon.","message":"The `absl.logging.exception` function's behavior regarding the `exc_info` argument changed in v2.0.0. Previously, passing `exc_info` could raise a `KeyError`. It now correctly accepts `exc_info` as an argument (with a default value of `True`).","severity":"breaking","affected_versions":"<2.0.0"},{"fix":"Choose unique and descriptive flag names, especially in larger applications or when integrating multiple libraries. For more advanced isolation, consider managing flags with separate `flags.FlagValues` instances, though this is less common for standard usage.","message":"Flag names defined with `absl.flags.DEFINE_*` are globally registered. This means that if multiple modules or libraries define flags with the same name, a `DuplicateFlagError` will occur upon import or flag definition.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T16:26:31.769Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Install the package using 'pip install absl-py'.","cause":"The 'absl-py' package is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'absl'"},{"fix":"Ensure 'absl-py' is installed in the correct environment using 'pip install absl-py'.","cause":"The 'absl-py' package is not installed or is installed in a different Python environment.","error":"ImportError: No module named absl.flags"},{"fix":"Ensure 'absl-py' is installed in the correct environment using 'pip install absl-py'.","cause":"The 'absl-py' package is not installed or is installed in a different Python environment.","error":"ImportError: No module named absl.testing"},{"fix":"Ensure 'absl-py' is installed in the correct environment using 'pip install absl-py'.","cause":"The 'absl-py' package is not installed or is installed in a different Python environment.","error":"ImportError: No module named 'absl'"},{"fix":"Ensure `app.run(main)` is called at the entry point of your script, or explicitly parse flags with `FLAGS(sys.argv)` before accessing them. Example: `from absl import app, flags; FLAGS = flags.FLAGS; flags.DEFINE_string('my_flag', 'default', 'My flag.'); def main(argv): print(FLAGS.my_flag); if __name__ == '__main__': app.run(main)`","cause":"A flag defined using `absl.flags` is being accessed before `absl.app.run()` has been called or before `absl.flags.FLAGS(sys.argv)` has explicitly parsed the command-line arguments.","error":"absl.flags._exceptions.UnparsedFlagAccessError: Trying to access flag --[flag_name] before flags were parsed."}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":"2.4.0","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":6.5,"disk_size":"18.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.22,"mem_mb":6.5,"disk_size":"18.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.13,"mem_mb":6.5,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":6.5,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.3,"mem_mb":7,"disk_size":"20.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.34,"mem_mb":7,"disk_size":"20.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.6,"import_time_s":0.25,"mem_mb":7,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.24,"mem_mb":7,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.3,"mem_mb":7.2,"disk_size":"12.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":7.2,"disk_size":"12.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.3,"mem_mb":7.2,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.31,"mem_mb":7.2,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.35,"mem_mb":7.5,"disk_size":"12.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":7.5,"disk_size":"12.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.29,"mem_mb":7.3,"disk_size":"13M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.3,"mem_mb":7.3,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":6.2,"disk_size":"18.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.21,"mem_mb":6.2,"disk_size":"18.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0.15,"mem_mb":6.2,"disk_size":"19M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.16,"mem_mb":6.2,"disk_size":"19M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}