pytest-dev / pytest-runner

MIT License
56 stars 21 forks source link

Crash on Python 3.7 #23

Closed brechtm closed 7 years ago

brechtm commented 7 years ago

If pytest-runner is included in setup's setup_requires, things go wrong on Python 3.7:

$ python3.7 setup.py --version
/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/distutils/dist.py:261: UserWarning: Unknown distribution option: 'use_scm_version'
  warnings.warn(msg)

Installed /private/var/folders/cm/h_fnh5lx0b5b1b6wvnlc7qlw0000gn/T/easy_install-x0vcd5t0/pytest-runner-2.9/.eggs/setuptools_scm-0.0.0-py3.7.egg
Traceback (most recent call last):
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 157, in save_modules
    yield saved
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 198, in setup_context
    yield
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 248, in run_setup
    DirectorySandbox(setup_dir).run(runner)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 278, in run
    return func()
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 246, in runner
    _execfile(setup_script, ns)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 47, in _execfile
    exec(code, globals, locals)
  File "/var/folders/cm/h_fnh5lx0b5b1b6wvnlc7qlw0000gn/T/easy_install-x0vcd5t0/pytest-runner-2.9/setup.py", line 60, in <module>
    'courier = rinoh.fonts.adobe14:courier',
  File "/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 852, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'setuptools_scm>=1.9' distribution was not found and is required by the application

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup.py", line 94, in <module>
    'Topic :: Text Processing :: Markup :: XML'
  File "/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 849, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1121, in best_match
    return self.obtain(req, installer)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1133, in obtain
    return installer(requirement)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 429, in fetch_build_egg
    return cmd.easy_install(req)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 665, in easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 695, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 876, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 1115, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/command/easy_install.py", line 1101, in run_setup
    run_setup(setup_script, args)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 251, in run_setup
    raise
  File "/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/contextlib.py", line 100, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 198, in setup_context
    yield
  File "/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/contextlib.py", line 100, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 169, in save_modules
    saved_exc.resume()
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 144, in resume
    six.reraise(type, exc, self._tb)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/_vendor/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 157, in save_modules
    yield saved
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 198, in setup_context
    yield
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 248, in run_setup
    DirectorySandbox(setup_dir).run(runner)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 278, in run
    return func()
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 246, in runner
    _execfile(setup_script, ns)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/sandbox.py", line 47, in _execfile
    exec(code, globals, locals)
  File "/var/folders/cm/h_fnh5lx0b5b1b6wvnlc7qlw0000gn/T/easy_install-x0vcd5t0/pytest-runner-2.9/setup.py", line 60, in <module>
    'courier = rinoh.fonts.adobe14:courier',
  File "/Users/brechtm/.pyenv/versions/3.7-dev/lib/python3.7/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/Users/brechtm/Documents/Code/rinohtype/.tox/py37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 852, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'setuptools_scm>=1.9' distribution was not found and is required by the application
RonnyPfannschmidt commented 7 years ago

@jaraco i believe this happens because of an interaction issue with recursive build requires

a "propper" workaround would be to provide eggs for all supported python versions as they arise

@brechtm my current understanding is, that when setuptools encounters the need for recursive egg building, something can go wrong, im not sure how to fix this, its one of the major pitas of setup_requires as is

jaraco commented 7 years ago

The issue doesn't occur on Python 3.6b3, so presumably Python 3.7 is implicated.

$ cat setup.py
import setuptools
__name__ == '__main__' and setuptools.setup(
  name='foo',
  version=1.0,
  setup_requires=['pytest-runner'],
  tests_require=['pytest'],
)
$ python setup.py pytest --addopts='setup.py'
running pytest
Searching for pytest
Best match: pytest 3.0.4
Processing pytest-3.0.4-py3.6.egg

Using /Users/jaraco/Dropbox/code/main/pytest-runner/issue23/.eggs/pytest-3.0.4-py3.6.egg
running egg_info
writing foo.egg-info/PKG-INFO
writing dependency_links to foo.egg-info/dependency_links.txt
writing top-level names to foo.egg-info/top_level.txt
reading manifest file 'foo.egg-info/SOURCES.txt'
writing manifest file 'foo.egg-info/SOURCES.txt'
running build_ext
====================================== test session starts =======================================
platform darwin -- Python 3.6.0b3, pytest-3.0.4, py-1.4.31, pluggy-0.4.0
rootdir: /Users/jaraco/Dropbox/code/main/pytest-runner, inifile: pytest.ini
collected 0 items 

================================== no tests ran in 0.01 seconds ==================================
$ 
jaraco commented 7 years ago

Using that same script, I was able to replicate the failure on Python 3.7.

jaraco commented 7 years ago

Oh, that's interesting. setuptools_scm is installing as version 0.0.0, which is not >=1.9 as required.

jaraco commented 7 years ago

I was able to replicate the failure without pytest-runner, so I'll report the issue upstream.

jaraco commented 7 years ago

Tests are now run against nightly, for what that's worth. And the upstream issue has been addressed for Python 3.7.