From issues-reply at bitbucket.org Tue Feb 2 07:01:36 2016 From: issues-reply at bitbucket.org (anatoly techtonik) Date: Tue, 02 Feb 2016 12:01:36 -0000 Subject: [Pytest-commit] Issue #309: 'py' environment is not listed (hpk42/tox) Message-ID: <20160202120136.40437.63255@celery-worker-101.ash1.bb-inf.net> New issue 309: 'py' environment is not listed https://bitbucket.org/hpk42/tox/issues/309/py-environment-is-not-listed anatoly techtonik: ``` > tox -l python ``` From issues-reply at bitbucket.org Sun Feb 7 11:22:46 2016 From: issues-reply at bitbucket.org (Ian Cordasco) Date: Sun, 07 Feb 2016 16:22:46 -0000 Subject: [Pytest-commit] Issue #310: posargs fails when providing arguments with spaces in quotes (hpk42/tox) Message-ID: <20160207162246.16465.81160@celery-worker-101.ash1.bb-inf.net> New issue 310: posargs fails when providing arguments with spaces in quotes https://bitbucket.org/hpk42/tox/issues/310/posargs-fails-when-providing-arguments Ian Cordasco: An example tox.ini ``` [testenv:venv] deps = flake8 commands = flake8 {posargs} ``` And the usage ``` $ tox -e venv -- --format="%(code)s:%(path)s:%(row)s:%(col)s: %(text)s" $ tox -e venv -- --format='%(code)s:%(path)s:%(row)s:%(col)s: %(text)s' ``` In both cases `%(text)s` is not passed as part of the argument to `--format` but instead is passed as an argument as if the user did instead ``` $ tox -e venv -- --format="%(code)s:%(path)s:%(row)s:%(col)s:" "%(text)s" ``` No amount of escaping (either of the space or the quotes) works. What does work, however, is: ``` $ tox -e venv -- --format="'%(code)s:%(path)s:%(row)s:%(col)s: %(text)s'" ``` In other words, using both types of quotes works. I looked but didn't see this reported anywhere else and I'm frankly not certain this is something that can be fixed. From issues-reply at bitbucket.org Mon Feb 8 05:52:26 2016 From: issues-reply at bitbucket.org (Sean Jensen-Grey) Date: Mon, 08 Feb 2016 10:52:26 -0000 Subject: [Pytest-commit] Issue #311: tox 2.3.1 venv creates malformed pip for jython (hpk42/tox) Message-ID: <20160208105226.4403.58104@celery-worker-102.ash1.bb-inf.net> New issue 311: tox 2.3.1 venv creates malformed pip for jython https://bitbucket.org/hpk42/tox/issues/311/tox-231-venv-creates-malformed-pip-for Sean Jensen-Grey: Running tox 2.3.1 under both * CPython 2.7.11 * CPython 3.5.1 When tox creates the venv for Jython (installed via homebrew) the resulting pip command has the entire #! bash script invocation line wrapped in a double quotes. ``` #!"/usr/bin/env /Users/seanj/w/projects/opensource-openmic-pdb/.tox/jython/bin/jython" ``` When this executed under the default bash shell. ``` bash: .tox/jython/bin/pip: "/usr/bin/env: bad interpreter: No such file or directory ``` When I remove the quotes, ./.tox/jython/bin/pip is able to execute properly. The tox.ini is here https://bitbucket.org/s3anj/tpak/src/b21fcc36b735?at=default From issues-reply at bitbucket.org Tue Feb 9 19:19:59 2016 From: issues-reply at bitbucket.org (Julian Berman) Date: Wed, 10 Feb 2016 00:19:59 -0000 Subject: [Pytest-commit] Issue #312: Merging / inlining test environment sections doesn't entirely interact well with conditional settings. (hpk42/tox) Message-ID: <20160210001959.64991.9389@celery-worker-102.ash1.bb-inf.net> New issue 312: Merging / inlining test environment sections doesn't entirely interact well with conditional settings. https://bitbucket.org/hpk42/tox/issues/312/merging-inlining-test-environment-sections Julian Berman: Reproducing tox.ini: ``` #!ini [tox] envlist = pypy, coverage [testenv] deps = pypy,coverage: twisted [testenv:coverage] deps = {[testenv]deps} coverage ``` which attempts to tell pip to install a req called ``pypy,coverage: twisted`` when the coverage test environment is run with ``tox -e coverage``. (The ``pypy`` environment works fine). From issues-reply at bitbucket.org Wed Feb 10 14:33:16 2016 From: issues-reply at bitbucket.org (Cyril ROELANDT) Date: Wed, 10 Feb 2016 19:33:16 -0000 Subject: [Pytest-commit] Issue #313: Handle mutliple backends for virtual environments (hpk42/tox) Message-ID: <20160210193316.30241.10263@celery-worker-103.ash1.bb-inf.net> New issue 313: Handle mutliple backends for virtual environments https://bitbucket.org/hpk42/tox/issues/313/handle-mutliple-backends-for-virtual Cyril ROELANDT: Currently, tox only handles "virtualenv" as a backend. There are other ways of creating isolated environments in which packages can be installed and tests can be run: one may want to use Nix (https://nixos.org/nix/) or Guix (http://www.gnu.org/software/guix/), two very nice functional package managers that can replace virtualenv+pip. These package managers fix some issues witnessed when using virtualenv (the environment variables leak into the "isolated" environment, external commands can be used, etc.); they also have drawbacks: some packages available on PyPI may not be available in Nix/Guix, some features may not be supported... I wrote a blog article explaining why one might want to move away from virtualenv (http://perso.aquilenet.fr/~steap//blog/2015/10/14/guix-tox/) as well as a proof of concept that allows users to use Guix as a replacement for virtualenv/pip (see the latests commits at https://git.framasoft.org/Steap/guix-tox/commits/guix-tox). Would you be interested in making tox a more generic piece of software, able to handle multiple package management backends? From issues-reply at bitbucket.org Thu Feb 11 11:56:29 2016 From: issues-reply at bitbucket.org (Henrik Skupin) Date: Thu, 11 Feb 2016 16:56:29 -0000 Subject: [Pytest-commit] Issue #314: tox command busted on Windows (hpk42/tox) Message-ID: <20160211165629.28497.97116@celery-worker-103.ash1.bb-inf.net> New issue 314: tox command busted on Windows https://bitbucket.org/hpk42/tox/issues/314/tox-command-busted-on-windows Henrik Skupin: The tox command on Windows is busted due to the changes made by @hpk42 in https://bitbucket.org/hpk42/tox/commits/0823f359a05bde1d8f12f02e98b6b3a26d83c2b2 In detail it is this change: > - newargs = [str(self.venv.getcommandpath())] + newargs > + newargs = [str(self.envconfig.envpython)] + newargs `envconfig` is not a property of the Action class, so changing it to the following will fix it: > newargs = [str(self.venv.envconfig.envpython)] + newargs Here the traceback: Traceback (most recent call last): File "c:\python27\lib\runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "c:\python27\lib\runpy.py", line 72, in _run_code exec code in run_globals File "C:\Python27\Scripts\tox.exe\__main__.py", line 9, in File "c:\python27\lib\site-packages\tox\session.py", line 39, in main retcode = Session(config).runcommand() File "c:\python27\lib\site-packages\tox\session.py", line 375, in runcommand return self.subcommand_test() File "c:\python27\lib\site-packages\tox\session.py", line 548, in subcommand_test self.runtestenv(venv) File "c:\python27\lib\site-packages\tox\session.py", line 556, in runtestenv venv.test(redirect=redirect) File "c:\python27\lib\site-packages\tox\venv.py", line 332, in test ignore_ret=ignore_ret, testcommand=True) File "c:\python27\lib\site-packages\tox\venv.py", line 362, in _pcall redirect=redirect, ignore_ret=ignore_ret) File "c:\python27\lib\site-packages\tox\session.py", line 136, in popen stdout=stdout, stderr=STDOUT) File "c:\python27\lib\site-packages\tox\session.py", line 219, in _popen args = self._rewriteargs(cwd, args) File "c:\python27\lib\site-packages\tox\session.py", line 214, in _rewriteargs newargs = [str(self.envconfig.envpython)] + newargs AttributeError: 'Action' object has no attribute 'envconfig' Command exited with code 1 From commits-noreply at bitbucket.org Thu Feb 11 12:02:40 2016 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 11 Feb 2016 17:02:40 -0000 Subject: [Pytest-commit] commit/tox: hpk42: fix issue314: fix invocation of .py scripts on windows Message-ID: <20160211170240.32104.93420@celery-worker-102.ash1.bb-inf.net> 1 new commit in tox: https://bitbucket.org/hpk42/tox/commits/bfe2e9b0a5ef/ Changeset: bfe2e9b0a5ef User: hpk42 Date: 2016-02-11 17:02:28+00:00 Summary: fix issue314: fix invocation of .py scripts on windows Affected #: 3 files diff -r 2d5d0e7584cc4cc35cc7e0519ce9610dd52b7a62 -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +2.3.2 +----- + +- fix issue314: fix command invocation with .py scripts on windows. + + 2.3.1 ----- diff -r 2d5d0e7584cc4cc35cc7e0519ce9610dd52b7a62 -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 tox.ini --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,6 @@ [tox] -envlist=py27,py26,py34,py33,py35,pypy,flakes,py26-bare +envlist=x{,-hello}{,-world} +#,py27,py26,py34,py33,py35,pypy,flakes,py26-bare [testenv:X] commands=echo {posargs} diff -r 2d5d0e7584cc4cc35cc7e0519ce9610dd52b7a62 -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 tox/session.py --- a/tox/session.py +++ b/tox/session.py @@ -211,7 +211,7 @@ if sys.platform == "win32": ext = os.path.splitext(str(newargs[0]))[1].lower() if ext == '.py' and self.venv: - newargs = [str(self.envconfig.envpython)] + newargs + newargs = [str(self.venv.envconfig.envpython)] + newargs return newargs Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Feb 11 12:05:34 2016 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 11 Feb 2016 17:05:34 -0000 Subject: [Pytest-commit] commit/tox: hpk42: Merged in nakatoio/tox (pull request #189) Message-ID: <20160211170534.31924.93235@celery-worker-103.ash1.bb-inf.net> 1 new commit in tox: https://bitbucket.org/hpk42/tox/commits/ddf15d86a209/ Changeset: ddf15d86a209 User: hpk42 Date: 2016-02-11 17:05:32+00:00 Summary: Merged in nakatoio/tox (pull request #189) Fix section substitution with {posargs} Affected #: 2 files diff -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 -r ddf15d86a2097e8d94fca572865fda556dca2623 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -274,6 +274,20 @@ ["echo", "cmd", "1", "2", "3", "4", "cmd", "2"], ] + def test_command_substitution_from_other_section_posargs(self, newconfig): + """Ensure subsitition from other section with posargs succeeds""" + config = newconfig(""" + [section] + key = thing {posargs} arg2 + [testenv] + commands = + {[section]key} + """) + reader = SectionReader("testenv", config._cfg) + reader.addsubstitutions([r"argpos"]) + x = reader.getargvlist("commands") + assert x == [['thing', 'argpos', 'arg2']] + def test_command_env_substitution(self, newconfig): """Ensure referenced {env:key:default} values are substituted correctly.""" config = newconfig(""" diff -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 -r ddf15d86a2097e8d94fca572865fda556dca2623 tox/config.py --- a/tox/config.py +++ b/tox/config.py @@ -1094,7 +1094,7 @@ current_command += line if is_section_substitution(current_command): - replaced = reader._replace(current_command) + replaced = reader._replace(current_command, crossonly=True) commands.extend(cls.getargvlist(reader, replaced)) else: commands.append(cls.processcommand(reader, current_command)) Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Feb 11 12:05:35 2016 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 11 Feb 2016 17:05:35 -0000 Subject: [Pytest-commit] commit/tox: 3 new changesets Message-ID: <20160211170535.11084.57194@celery-worker-103.ash1.bb-inf.net> 3 new commits in tox: https://bitbucket.org/hpk42/tox/commits/66756a0fabc6/ Changeset: 66756a0fabc6 User: nakatoio Date: 2016-02-11 02:46:02+00:00 Summary: Add test for subsitition from other section with posargs Test command substitution from other section with {posargs} in use. Issue #279 Affected #: 1 file diff -r 2d5d0e7584cc4cc35cc7e0519ce9610dd52b7a62 -r 66756a0fabc6b74d7cc47629b9335992987ab3ad tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -274,6 +274,20 @@ ["echo", "cmd", "1", "2", "3", "4", "cmd", "2"], ] + def test_command_substitution_from_other_section_posargs(self, newconfig): + """Ensure subsitition from other section with posargs succeeds""" + config = newconfig(""" + [section] + key = thing {posargs} arg2 + [testenv] + commands = + {[section]key} + """) + reader = SectionReader("testenv", config._cfg) + reader.addsubstitutions([r"argpos"]) + x = reader.getargvlist("commands") + assert x == [['thing', 'argpos' 'arg2']] + def test_command_env_substitution(self, newconfig): """Ensure referenced {env:key:default} values are substituted correctly.""" config = newconfig(""" https://bitbucket.org/hpk42/tox/commits/7a5151487905/ Changeset: 7a5151487905 User: nakatoio Date: 2016-02-11 04:54:23+00:00 Summary: Fix section substitution with {posargs} Use crossonly to stop substitution immediately after the section is substituted, the values run through substitution again afterwards, and this will clean off {posargs} and any other substitutions that need to be made. Affected #: 2 files diff -r 66756a0fabc6b74d7cc47629b9335992987ab3ad -r 7a5151487905f30101309bc43b387760c66b8771 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -286,7 +286,7 @@ reader = SectionReader("testenv", config._cfg) reader.addsubstitutions([r"argpos"]) x = reader.getargvlist("commands") - assert x == [['thing', 'argpos' 'arg2']] + assert x == [['thing', 'argpos', 'arg2']] def test_command_env_substitution(self, newconfig): """Ensure referenced {env:key:default} values are substituted correctly.""" diff -r 66756a0fabc6b74d7cc47629b9335992987ab3ad -r 7a5151487905f30101309bc43b387760c66b8771 tox/config.py --- a/tox/config.py +++ b/tox/config.py @@ -1094,7 +1094,7 @@ current_command += line if is_section_substitution(current_command): - replaced = reader._replace(current_command) + replaced = reader._replace(current_command, crossonly=True) commands.extend(cls.getargvlist(reader, replaced)) else: commands.append(cls.processcommand(reader, current_command)) https://bitbucket.org/hpk42/tox/commits/ddf15d86a209/ Changeset: ddf15d86a209 User: hpk42 Date: 2016-02-11 17:05:32+00:00 Summary: Merged in nakatoio/tox (pull request #189) Fix section substitution with {posargs} Affected #: 2 files diff -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 -r ddf15d86a2097e8d94fca572865fda556dca2623 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -274,6 +274,20 @@ ["echo", "cmd", "1", "2", "3", "4", "cmd", "2"], ] + def test_command_substitution_from_other_section_posargs(self, newconfig): + """Ensure subsitition from other section with posargs succeeds""" + config = newconfig(""" + [section] + key = thing {posargs} arg2 + [testenv] + commands = + {[section]key} + """) + reader = SectionReader("testenv", config._cfg) + reader.addsubstitutions([r"argpos"]) + x = reader.getargvlist("commands") + assert x == [['thing', 'argpos', 'arg2']] + def test_command_env_substitution(self, newconfig): """Ensure referenced {env:key:default} values are substituted correctly.""" config = newconfig(""" diff -r bfe2e9b0a5ef459d4a57f695c6aa9e7cf0fa99a4 -r ddf15d86a2097e8d94fca572865fda556dca2623 tox/config.py --- a/tox/config.py +++ b/tox/config.py @@ -1094,7 +1094,7 @@ current_command += line if is_section_substitution(current_command): - replaced = reader._replace(current_command) + replaced = reader._replace(current_command, crossonly=True) commands.extend(cls.getargvlist(reader, replaced)) else: commands.append(cls.processcommand(reader, current_command)) Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Feb 11 12:10:02 2016 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 11 Feb 2016 17:10:02 -0000 Subject: [Pytest-commit] commit/tox: hpk42: fix issue279: allow cross-section substitution when the value contains Message-ID: <20160211171002.4421.46760@celery-worker-103.ash1.bb-inf.net> 1 new commit in tox: https://bitbucket.org/hpk42/tox/commits/20f9fb8d1172/ Changeset: 20f9fb8d1172 User: hpk42 Date: 2016-02-11 17:06:33+00:00 Summary: fix issue279: allow cross-section substitution when the value contains posargs. Thanks Sachi King for the PR. Affected #: 1 file diff -r ddf15d86a2097e8d94fca572865fda556dca2623 -r 20f9fb8d1172aba435cfdf7f0991d8dedc83be26 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,9 @@ - fix issue314: fix command invocation with .py scripts on windows. +- fix issue279: allow cross-section substitution when the value contains + posargs. Thanks Sachi King for the PR. + 2.3.1 ----- Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From commits-noreply at bitbucket.org Thu Feb 11 12:27:18 2016 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Thu, 11 Feb 2016 17:27:18 -0000 Subject: [Pytest-commit] commit/tox: hpk42: bump version, fix tox.ini Message-ID: <20160211172718.32546.65603@celery-worker-101.ash1.bb-inf.net> 1 new commit in tox: https://bitbucket.org/hpk42/tox/commits/4dbfb1f1eb86/ Changeset: 4dbfb1f1eb86 User: hpk42 Date: 2016-02-11 17:27:10+00:00 Summary: bump version, fix tox.ini Affected #: 3 files diff -r 20f9fb8d1172aba435cfdf7f0991d8dedc83be26 -r 4dbfb1f1eb86b35cbd2c83461e1e294651e89cf6 setup.py --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ description='virtualenv-based automation of test activities', long_description=open("README.rst").read(), url='http://tox.testrun.org/', - version='2.3.1', + version='2.3.2', license='http://opensource.org/licenses/MIT', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], author='holger krekel', diff -r 20f9fb8d1172aba435cfdf7f0991d8dedc83be26 -r 4dbfb1f1eb86b35cbd2c83461e1e294651e89cf6 tox.ini --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,5 @@ [tox] -envlist=x{,-hello}{,-world} -#,py27,py26,py34,py33,py35,pypy,flakes,py26-bare +envlist=py27,py26,py34,py33,py35,pypy,flakes,py26-bare [testenv:X] commands=echo {posargs} diff -r 20f9fb8d1172aba435cfdf7f0991d8dedc83be26 -r 4dbfb1f1eb86b35cbd2c83461e1e294651e89cf6 tox/__init__.py --- a/tox/__init__.py +++ b/tox/__init__.py @@ -1,5 +1,5 @@ # -__version__ = '2.3.1' +__version__ = '2.3.2' from .hookspecs import hookspec, hookimpl # noqa Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. From issues-reply at bitbucket.org Tue Feb 16 10:16:48 2016 From: issues-reply at bitbucket.org (Barry Warsaw) Date: Tue, 16 Feb 2016 15:16:48 -0000 Subject: [Pytest-commit] Issue #315: tox-quickstart should have a --help (hpk42/tox) Message-ID: <20160216151648.16931.55515@celery-worker-102.ash1.bb-inf.net> New issue 315: tox-quickstart should have a --help https://bitbucket.org/hpk42/tox/issues/315/tox-quickstart-should-have-a-help Barry Warsaw: and probably a --version too. From issues-reply at bitbucket.org Thu Feb 25 05:55:21 2016 From: issues-reply at bitbucket.org (Florian Bruhin) Date: Thu, 25 Feb 2016 10:55:21 -0000 Subject: [Pytest-commit] Issue #316: "Commands succeeded" when no commands are defined (hpk42/tox) Message-ID: <20160225105521.2351.63290@celery-worker-102.ash1.bb-inf.net> New issue 316: "Commands succeeded" when no commands are defined https://bitbucket.org/hpk42/tox/issues/316/commands-succeeded-when-no-commands-are Florian Bruhin: When one forgets to add `commands = ...` to `tox.ini`, this is most likely a mistake - however, tox happily runs nothing and tells us the commands succeeded. I think instead it should output a warning, similar to the yellow "no tests ran" which pytest does. From issues-reply at bitbucket.org Sun Feb 28 20:14:23 2016 From: issues-reply at bitbucket.org (Sachi King) Date: Mon, 29 Feb 2016 01:14:23 -0000 Subject: [Pytest-commit] Issue #317: tox doesn't evaluate minversion from config before attempting to parse full config (hpk42/tox) Message-ID: <20160229011423.30836.82399@celery-worker-101.ash1.bb-inf.net> New issue 317: tox doesn't evaluate minversion from config before attempting to parse full config https://bitbucket.org/hpk42/tox/issues/317/tox-doesnt-evaluate-minversion-from-config Sachi King: If a user defines a minversion greater than that which is installed which fixes/uses syntax that the installed version of tox cannot parse, tox bails with a stack trace rather than exiting with an error telling the user their tox is too old. Tox should check the minversion prior to attempting to parse the remainder of the config file. From issues-reply at bitbucket.org Mon Feb 29 13:22:49 2016 From: issues-reply at bitbucket.org (Ed Morley) Date: Mon, 29 Feb 2016 18:22:49 -0000 Subject: [Pytest-commit] Issue #318: Allow wildcards to be used in TOXENV and with the `-e` option (hpk42/tox) Message-ID: <20160229182249.58384.2482@celery-worker-102.ash1.bb-inf.net> New issue 318: Allow wildcards to be used in TOXENV and with the `-e` option https://bitbucket.org/hpk42/tox/issues/318/allow-wildcards-to-be-used-in-toxenv-and Ed Morley: Currently it's not possible to use wildcards with TOXENV and/or the `-e` option. For example, I'd like to be able to use: ``` export TOXENV=py27-* ``` ... to just run the python 2.7 subset of the peep tox config: https://github.com/erikrose/peep/blob/daa9e87014de1f907fac446f89b9d849665a649e/tox.ini#L8-L9 However since wildcards aren't supported, I've had to resort to a bit of a hack to generate the TOXENV in the Travis config: ``` export TOXENV=`tox --listenvs | grep "py${TRAVIS_PYTHON_VERSION/./}-" | tr '\n' ','` ``` See: https://github.com/edmorley/peep/commit/bb77b96dfd548dd3ba9ac1c595c047dbd3e7f8a9 Many thanks :-)