Skip to content

Unable to find pact-plugin-cli binary executable. #1623

Description

@MarkusH

Have you read the Contributing Guidelines on issues?

Prerequisites

  • I'm using the latest version of pact-python.
  • I have read the console error message carefully (if applicable).

Description

I've installed pact-python==3.4.0, pact-python-cli==2.6.0.1, and pact-python-ffi==0.5.4.0. The way that _find_executable is implemented seems a bit strange. Unless the PACT_USE_SYSTEM_BINS environment variable is set, the function seems to look for the executable in a folder bin relative to pact-python-cli/src/pact_cli/__init__.py. Which would be something like this:

__file__ = "~/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli/__init__.py"
Path(__file__).parent == "~/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli"
Path(__file__).parent.resolve() == "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli"
Path(__file__).parent.resolve() / "bin" == "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli/bin"

While the file is actually located inside /home/markus/projects/myproject/.venv/bin.

Reproducible demo

No response

Steps to reproduce

I've only installed the library. pact-python-cli is pulled in through a dependency. When using the library from the repo's checkout /home/markus/projects/myproject it works fine. But when using a git worktree at /home/markus/projects/myproject-worktrees/branch-name-1 while reusing the same virtual environment, I get the error that the pact-plugin-cli executable cannot be found.

Expected behavior

I'd expect the function to correctly locate the executable.

Actual behavior

Cut down to the part that I can share.

  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/some_library/pact_testing.py", line 9, in <module>
    import pact.v2 as pact_v2
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/v2/__init__.py", line 4, in <module>
    from pact.v2.broker import Broker
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/match/__init__.py", line 338, in __import__
    return __builtins_import(name, globals, locals, fromlist, level)
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/generate/__init__.py", line 167, in __import__
    return __builtins_import(name, globals, locals, fromlist, level)
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/v2/broker.py", line 9, in <module>
    from pact_cli import _telemetry_env
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/match/__init__.py", line 338, in __import__
    return __builtins_import(name, globals, locals, fromlist, level)
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact/generate/__init__.py", line 167, in __import__
    return __builtins_import(name, globals, locals, fromlist, level)
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli/__init__.py", line 217, in <module>
    PLUGIN_CLI_PATH = _find_executable("pact-plugin-cli")
  File "/home/markus/projects/myproject/.venv/lib/python3.13/site-packages/pact_cli/__init__.py", line 181, in _find_executable
    warnings.warn(
    ~~~~~~~~~~~~~^
        f"Bundled {executable} binary not found; "
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
        stacklevel=2,
        ^^^^^^^^^^^^^
    )
    ^
RuntimeWarning: Bundled pact-plugin-cli binary not found; using system installation instead.

Your environment

  • Arch Linux
  • No system-wide pact installed libraries
  • Python 3.13

Self-service

  • I'd be willing to fix this bug myself.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions