Obtain the dependencies from a package. Please note this function is possibly SLOW, especially if you enable the recursive mode.
(package,
recursive=False,
verbose=False,
include_build_requirements=False)
| 602 | |
| 603 | |
| 604 | def get_package_dependencies(package, |
| 605 | recursive=False, |
| 606 | verbose=False, |
| 607 | include_build_requirements=False): |
| 608 | """ Obtain the dependencies from a package. Please note this |
| 609 | function is possibly SLOW, especially if you enable |
| 610 | the recursive mode. |
| 611 | """ |
| 612 | packages_processed = set() |
| 613 | package_queue = [package] |
| 614 | reqs = set() |
| 615 | reqs_as_names = set() |
| 616 | while len(package_queue) > 0: |
| 617 | current_queue = package_queue |
| 618 | package_queue = [] |
| 619 | for package_dep in current_queue: |
| 620 | new_reqs = set() |
| 621 | if verbose: |
| 622 | print("get_package_dependencies: resolving dependency " |
| 623 | f"to package name: {package_dep}") |
| 624 | package = get_package_name(package_dep) |
| 625 | if package.lower() in packages_processed: |
| 626 | continue |
| 627 | if verbose: |
| 628 | print("get_package_dependencies: " |
| 629 | "processing package: {}".format(package)) |
| 630 | print("get_package_dependencies: " |
| 631 | "Packages seen so far: {}".format( |
| 632 | packages_processed |
| 633 | )) |
| 634 | packages_processed.add(package.lower()) |
| 635 | |
| 636 | # Use our regular folder processing to examine: |
| 637 | new_reqs = new_reqs.union(_extract_info_from_package( |
| 638 | package_dep, extract_type="dependencies", |
| 639 | debug=verbose, |
| 640 | include_build_requirements=include_build_requirements, |
| 641 | )) |
| 642 | |
| 643 | # Process new requirements: |
| 644 | if verbose: |
| 645 | print('get_package_dependencies: collected ' |
| 646 | "deps of '{}': {}".format( |
| 647 | package_dep, str(new_reqs), |
| 648 | )) |
| 649 | for new_req in new_reqs: |
| 650 | try: |
| 651 | req_name = get_package_name(new_req) |
| 652 | except ValueError as e: |
| 653 | if new_req.find(";") >= 0: |
| 654 | # Conditional dep where condition isn't met? |
| 655 | # --> ignore it |
| 656 | continue |
| 657 | if verbose: |
| 658 | print("get_package_dependencies: " + |
| 659 | "unexpected failure to get name " + |
| 660 | "of '" + str(new_req) + "': " + |
| 661 | str(e)) |