Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Requesting missing interpreter with 'usedevelop = true' results in AttributeError #2826

Closed
stephenfin opened this issue Jan 6, 2023 · 0 comments

Comments

@stephenfin
Copy link
Contributor

Issue

Given the following minimal tox.ini:

[testenv]
envlist = python3

[testenv]
usedevelop = true

Running with a random pyXY factor on a host that doesn't have pythonX.Y results in an AttributeError:

py32: internal error
Traceback (most recent call last):
  File "/tox/src/tox/session/cmd/run/single.py", line 45, in _evaluate
    tox_env.setup()
  File "/tox/src/tox/tox_env/api.py", line 248, in setup
    self._setup_env()
  File "/tox/src/tox/tox_env/python/runner.py", line 106, in _setup_env
    super()._setup_env()
  File "/tox/src/tox/tox_env/python/api.py", line 186, in _setup_env
    self.ensure_python_env()
  File "/tox/src/tox/tox_env/python/api.py", line 190, in ensure_python_env
    conf = self.python_cache()
           ^^^^^^^^^^^^^^^^^^^
  File "/tox/src/tox/tox_env/python/virtual_env/api.py", line 77, in python_cache
    base = super().python_cache()
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/tox/src/tox/tox_env/python/api.py", line 228, in python_cache
    "version_info": list(self.base_python.version_info),
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'version_info'
  py32: FAIL code 2 (0.00 seconds)
  evaluation failed :( (0.06 seconds

This was alluded to in #2811 but that issue tracks a separate bug.

Environment

Provide at least:

  • OS: Fedora 36
  • pip list of the host Python where tox is installed:
pip list
Package       Version
------------- -------
cachetools    5.2.0
chardet       5.1.0
colorama      0.4.6
distlib       0.3.6
filelock      3.9.0
packaging     22.0
pip           22.3.1
platformdirs  2.6.2
pluggy        1.0.0
pyproject_api 1.4.0
setuptools    65.6.3
tox           4.2.4
virtualenv    20.17.1
wheel         0.38.4

Output of running tox

Provide the output of tox -rvv:

(not relevant)

Minimal example

If possible, provide a minimal reproducer for the issue:

(see above)

stephenfin added a commit to stephenfin/tox that referenced this issue Jan 6, 2023
We were correctly raising the Skip or NoInterpreter exceptions upon
first access of the 'base_python' property of the 'Python' class,
however, subsequent calls would simply return None. This meant we did
not trigger our exception flow as expected and resulted in a traceback
like so:

  ❯ tox --skip-missing-interpreter=true -e py33
  py33: internal error
  Traceback (most recent call last):
    File "/tox/src/tox/session/cmd/run/single.py", line 45, in _evaluate
      tox_env.setup()
    File "/tox/src/tox/tox_env/api.py", line 248, in setup
      self._setup_env()
    File "/tox/src/tox/tox_env/python/runner.py", line 106, in _setup_env
      super()._setup_env()
    File "/tox/src/tox/tox_env/python/api.py", line 186, in _setup_env
      self.ensure_python_env()
    File "/tox/src/tox/tox_env/python/api.py", line 190, in ensure_python_env
      conf = self.python_cache()
             ^^^^^^^^^^^^^^^^^^^
    File "/tox/src/tox/tox_env/python/virtual_env/api.py", line 77, in python_cache
      base = super().python_cache()
             ^^^^^^^^^^^^^^^^^^^^^^
    File "/tox/src/tox/tox_env/python/api.py", line 228, in python_cache
      "version_info": list(self.base_python.version_info),
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  AttributeError: 'NoneType' object has no attribute 'version_info'
    py33: FAIL code 2 (0.00 seconds)
    evaluation failed :( (0.06 seconds)

(from an environment without Python 3.3)

Correct this so that we also raise these exceptions on subsequent
accesses.

  ❯ tox --skip-missing-interpreter=true -e py33
  py33: skipped because could not find python interpreter with spec(s): py33
    py33: SKIP (0.00 seconds)
    evaluation failed :( (0.06 seconds)

Note that this fix emphasises a change in behavior in tox 4. With the
above configuration, tox 3 would have skipped the environment a reported
success. By comparison, tox 4 reports a failure. This behavior change
was introduced in tox-dev#2206. A future change will note this in the
documentation.

Also note that this is still not complete. Running the above command
with '--skip-missing-interpreters=false' instead will currently result
in an unhandled exception. This is an existing issue that will need to
be addressed separately.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Closes: tox-dev#2826
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants