{"id":21720,"library":"py-import-cycles","title":"py-import-cycles","description":"Detect import cycles in Python projects. Version 0.6.2 supports Python >=3.12, uses AST parsing (no runtime import). Available on PyPI.","status":"active","version":"0.6.2","language":"python","source_language":"en","source_url":"https://github.com/si-23/py-import-cycles","tags":["import-cycles","code-analysis","linting","ast"],"install":[{"cmd":"pip install py-import-cycles","lang":"bash","label":"PyPI"}],"dependencies":[],"imports":[{"note":"Hyphens are not allowed in Python identifiers; use underscores.","wrong":"from py-import-cycles import ImportCycleFinder","symbol":"ImportCycleFinder","correct":"from py_import_cycles import ImportCycleFinder"},{"note":"The top-level find_cycles function is the quickstart entry point.","symbol":"find_cycles","correct":"from py_import_cycles import find_cycles"}],"quickstart":{"code":"from py_import_cycles import find_cycles\n\ncycles = find_cycles('my_package', include_external=False)\nif cycles:\n    print('Cycles found:', cycles)\nelse:\n    print('No cycles detected')","lang":"python","description":"Scan a package for import cycles. The function returns a dictionary mapping module paths to lists of cycles."},"warnings":[{"fix":"Use Python 3.12 or later.","message":"Requires Python >=3.12; will not install or run on older versions.","severity":"breaking","affected_versions":"0.6.2"},{"fix":"Run from project root or adjust Python path.","message":"Import path must be resolvable on sys.path; local modules need correct package structure or working directory.","severity":"gotcha","affected_versions":"all"},{"fix":"Static analysis only; consider runtime checks for dynamic imports.","message":"find_cycles uses AST parsing, so conditional imports or dynamic imports may not be detected.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Use from py_import_cycles import find_cycles as primary API.","cause":"Older version (pre-0.6) used a different API; or typo in symbol name.","error":"ImportError: cannot import name 'ImportCycleFinder' from 'py_import_cycles'"},{"fix":"Import as import py_import_cycles (underscore).","cause":"Using hyphen in import statement instead of underscore.","error":"ModuleNotFoundError: No module named 'py-import-cycles'"},{"fix":"Update package: pip install --upgrade py-import-cycles. Check documentation for correct parameters.","cause":"The signature changed in version 0.6; earlier versions may not support this.","error":"TypeError: find_cycles() got an unexpected keyword argument 'include_external'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}