pytest-bdd icon indicating copy to clipboard operation
pytest-bdd copied to clipboard

Unable to install pytest-bdd in Debian 11 Bullseye

Open Jamie- opened this issue 6 months ago • 3 comments
trafficstars

Describe the bug Pip released version 25.1 4 days ago: https://pip.pypa.io/en/stable/news/#v25-1

It seems that Gherkin 29.0.0 is not installable on Debian Bullseye (Python 3.9) anymore starting from Pip 25.1 - see fail below.

pytest-bdd 8.1.0 pins gherkin-official to ^29.0.0 - https://github.com/pytest-dev/pytest-bdd/blob/8.1.0/pyproject.toml#L44

Strangely this doesn't reproduce in the python:3.9-bullseye Docker image using the Python version it supplies, but it does using a vanilla version of Bullseye and installing Python from Debian's package repos.

To Reproduce I'm using Docker to give me a Debian Bullseye environment

docker run --rm -it debian:bullseye

From within this container:

apt update
apt install -y --no-install-recommends python3 python3-pip python3-venv
python3 -m venv tmp
. ./tmp/bin/activate
pip install pip==25.1
pip install pytest-bdd

Produces:

# pip install pytest-bdd
Collecting pytest-bdd
  Downloading pytest_bdd-8.1.0-py3-none-any.whl.metadata (53 kB)
Collecting Mako (from pytest-bdd)
  Downloading mako-1.3.10-py3-none-any.whl.metadata (2.9 kB)
Collecting gherkin-official<30.0.0,>=29.0.0 (from pytest-bdd)
  Downloading gherkin_official-29.0.0-py3-none-any.whl.metadata (563 bytes)
Collecting packaging (from pytest-bdd)
  Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting parse (from pytest-bdd)
  Downloading parse-1.20.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting parse-type (from pytest-bdd)
  Downloading parse_type-0.6.4-py2.py3-none-any.whl.metadata (12 kB)
Collecting pytest>=7.0.0 (from pytest-bdd)
  Downloading pytest-8.3.5-py3-none-any.whl.metadata (7.6 kB)
Collecting typing-extensions (from pytest-bdd)
  Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)
Collecting exceptiongroup>=1.0.0rc8 (from pytest>=7.0.0->pytest-bdd)
  Downloading exceptiongroup-1.2.2-py3-none-any.whl.metadata (6.6 kB)
Collecting iniconfig (from pytest>=7.0.0->pytest-bdd)
  Downloading iniconfig-2.1.0-py3-none-any.whl.metadata (2.7 kB)
Collecting pluggy<2,>=1.5 (from pytest>=7.0.0->pytest-bdd)
  Downloading pluggy-1.5.0-py3-none-any.whl.metadata (4.8 kB)
Collecting tomli>=1 (from pytest>=7.0.0->pytest-bdd)
  Downloading tomli-2.2.1-py3-none-any.whl.metadata (10 kB)
Collecting MarkupSafe>=0.9.2 (from Mako->pytest-bdd)
  Downloading MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Collecting six>=1.15 (from parse-type->pytest-bdd)
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Downloading pytest_bdd-8.1.0-py3-none-any.whl (49 kB)
Downloading gherkin_official-29.0.0-py3-none-any.whl (37 kB)
Downloading pytest-8.3.5-py3-none-any.whl (343 kB)
Downloading pluggy-1.5.0-py3-none-any.whl (20 kB)
Downloading exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Downloading tomli-2.2.1-py3-none-any.whl (14 kB)
Downloading iniconfig-2.1.0-py3-none-any.whl (6.0 kB)
Downloading mako-1.3.10-py3-none-any.whl (78 kB)
Downloading MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20 kB)
Downloading packaging-25.0-py3-none-any.whl (66 kB)
Downloading parse-1.20.2-py2.py3-none-any.whl (20 kB)
Downloading parse_type-0.6.4-py2.py3-none-any.whl (27 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)
Installing collected packages: parse, gherkin-official, typing-extensions, tomli, six, pluggy, packaging, MarkupSafe, iniconfig, exceptiongroup, pytest, parse-type, Mako, pytest-bdd
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/lib/python3.9/py_compile.py", line 144, in compile
    code = loader.source_to_code(source_bytes, dfile or file,
  File "<frozen importlib._bootstrap_external>", line 853, in source_to_code
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/tmp/lib/python3.9/site-packages/gherkin/count_symbols_py2.py", line 3
    REGEX_ASTRAL_SYMBOLS = re.compile(ur'[\uD800-\uDBFF][\uDC00-\uDFFF]', re.UNICODE)
                                        ^
SyntaxError: invalid syntax

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.9/compileall.py", line 238, in compile_file
    ok = py_compile.compile(fullname, cfile, dfile, True,
  File "/usr/lib/python3.9/py_compile.py", line 150, in compile
    raise py_exc
py_compile.PyCompileError:   File "/tmp/lib/python3.9/site-packages/gherkin/count_symbols_py2.py", line 3
    REGEX_ASTRAL_SYMBOLS = re.compile(ur'[\uD800-\uDBFF][\uDC00-\uDFFF]', re.UNICODE)
                                        ^
SyntaxError: invalid syntax


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper
    status = _inner_run()
  File "/tmp/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run
    return self.run(options, args)
  File "/tmp/lib/python3.9/site-packages/pip/_internal/cli/req_command.py", line 68, in wrapper
    return func(self, options, args)
  File "/tmp/lib/python3.9/site-packages/pip/_internal/commands/install.py", line 459, in run
    installed = install_given_reqs(
  File "/tmp/lib/python3.9/site-packages/pip/_internal/req/__init__.py", line 83, in install_given_reqs
    requirement.install(
  File "/tmp/lib/python3.9/site-packages/pip/_internal/req/req_install.py", line 867, in install
    install_wheel(
  File "/tmp/lib/python3.9/site-packages/pip/_internal/operations/install/wheel.py", line 728, in install_wheel
    _install_wheel(
  File "/tmp/lib/python3.9/site-packages/pip/_internal/operations/install/wheel.py", line 614, in _install_wheel
    success = compileall.compile_file(path, force=True, quiet=True)
  File "/usr/lib/python3.9/compileall.py", line 255, in compile_file
    msg = err.msg.encode(sys.stdout.encoding,
TypeError: encode() argument 'encoding' must be str, not None

Note that you can reproduce this with pip install gherkin-official\<30 instead of pip install pytest-bdd but as the latest release version of gherkin works (pip install gherkin-official) it seems like a pytest-bdd issue.

Also worth adding, which I find very strange, this only seems to reproduce on first install, subsequent runs of pip install pytest-bdd complete without issue. Even though the first attempt fails, and with exit code 2.

Expected behavior pytest-bdd to successfully install

Version

  • pytest version: 8.3.5
  • pytest-bdd version: 8.1.0
  • OS: Debian Bullseye

Jamie- avatar Apr 29 '25 15:04 Jamie-