10

I have the following minimal setup.py:

import setuptools

setuptools.setup(
    setup_requires=['pytest-runner'],
    tests_require=['mock', 'pytest'],
    test_suite='tests',
    python_requires='>=2.7',
)

when running it with

python setup.py test

I keep getting the following error:

Traceback (most recent call last): File "setup.py", line 8, in

<module>
    python_requires='>=2.7',   File "/Users/project/tmp/env/lib/python2.7/site-packages/setuptools/__init__.py",
line 145, in setup
    return distutils.core.setup(**attrs)   File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py",
line 151, in setup
    dist.run_commands()   File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py",
line 953, in run_commands
    self.run_command(cmd)   File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py",
line 972, in run_command
    cmd_obj.run()   File "/Users/project/tmp/.eggs/pytest_runner-4.2-py2.7.egg/ptr.py",
line 176, in run
    return self.run_tests()   File "/Users/project/tmp/.eggs/pytest_runner-4.2-py2.7.egg/ptr.py",
line 187, in run_tests
    result_code = __import__('pytest').main()   File "/Users/project/tmp/.eggs/pytest-4.2.0-py2.7.egg/pytest.py",
line 14, in <module>
    from _pytest.fixtures import fillfixtures as _fillfuncargs   File "/Users/project/tmp/.eggs/pytest-4.2.0-py2.7.egg/_pytest/fixtures.py",
line 16, in <module>
    from more_itertools import flatten   File "build/bdist.macosx-10.13-x86_64/egg/more_itertools/__init__.py", line
1, in <module  File
"/Users/project/tmp/.eggs/more_itertools-6.0.0-py2.7.egg/more_itertools/more.py",
line 329
    def _collate(*iterables, key=lambda a: a, reverse=False):
                               ^ SyntaxError: invalid syntax

The problem appears also in the tests of more_itertools that are executed during first run, when setup tools installs test dependencies:

Downloading
https://files.pythonhosted.org/packages/dd/f4/cdfbb6f07f767e0cd8a11b16adfecc735b6eb87dbebda026ce8898e1cc22/more-itertools-6.0.0.tar.gz#sha256=590044e3942351a1bdb1de960b739ff4ce277960f2425ad4509446dbace8d9d1
Best match: more-itertools 6.0.0 Processing
more-itertools-6.0.0.tar.gz Writing
/var/folders/lq/c1ll7pqx7rb28p7m_8wz3h2d0r0mws/T/easy_install-Auek5Z/more-itertools-6.0.0/setup.cfg
Running more-itertools-6.0.0/setup.py -q bdist_egg --dist-dir
/var/folders/lq/c1ll7pqx7rb28p7m_8wz3h2d0r0mws/T/easy_install-Auek5Z/more-itertools-6.0.0/egg-dist-tmp-I3ic_t
warning: no files found matching 'fabfile.py'   File
"build/bdist.macosx-10.13-x86_64/egg/more_itertools/tests/test_more.py",
line 892
    print(item, file=f)
                    ^ SyntaxError: invalid syntax

  File "build/bdist.macosx-10.13-x86_64/egg/more_itertools/more.py",
line 329
    def _collate(*iterables, key=lambda a: a, reverse=False):
                               ^ SyntaxError: invalid syntax

zip_safe flag not set; analyzing archive contents... Copying
more_itertools-6.0.0-py2.7.egg to /Users/project/tmp/.eggs

Installed /Users/project/tmp/.eggs/more_itertools-6.0.0-py2.7.egg

The problem does not happen when I install more_itertools with

pip install more_itertools
U13-Forward
  • 69,221
  • 14
  • 89
  • 114
dzieciou
  • 4,049
  • 8
  • 41
  • 85
  • 1
    `more_itertools` requires Python 3 (`python_requires='>=3.4',`), not Python 2..7 – Chris_Rands Feb 12 '19 at 10:50
  • @Chris_Rands I'm confused. When I `pip install more_itertools` (with pip for Python 2.7) , then it works. Why pip for 2.7 is able to install more_itertools and resolve the problem, why setuptools cannot? – dzieciou Feb 12 '19 at 10:58
  • 1
    release 5.0.0 of `more_itertools` supported python 2.7 but it no longer does- the solution is to use python 3! – Chris_Rands Feb 12 '19 at 11:03
  • @Chris_Rands If release support something in one version and then it stops support (is not backward-compatible), then it should change the version number. Or I am missing something? – dzieciou Feb 12 '19 at 11:06
  • 1
    Solved via https://github.com/pytest-dev/pytest/issues/4772: `tests_require=['mock', 'pytest','more-itertools<=5.0.0'],` – dzieciou Feb 12 '19 at 11:10

1 Answers1

12

The recently released version 6.0 of more-itertools seems to have introduced this bug. The following should hot-fix it:

import setuptools

setuptools.setup(
    setup_requires=['pytest-runner'],
    tests_require=['mock', 'more-itertools<6.0.0', 'pytest'],
    test_suite='tests',
    python_requires='>=2.7',
)

The issue is already tracked here: https://github.com/pytest-dev/pytest/issues/4770

Credit: I just saw that @dzieciou already answered through the comments.

patzm
  • 973
  • 11
  • 23