Even when no test is run, test_distutils alters the environment:
$ ./python -m test -v --fail-env-changed test_distutils -m DONTEXISTS
== CPython 3.7.7+ (heads/3.7:1cdc61c767, Mar 24 2020, 17:25:30) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
== Linux-5.5.9-200.fc31.x86_64-x86_64-with-fedora-31-Thirty_One little-endian
== cwd: /home/vstinner/python/3.7/build/test_python_157151
== CPU count: 8
== encodings: locale=UTF-8, FS=utf-8
0:00:00 load avg: 0.37 Run tests sequentially
0:00:00 load avg: 0.37 [1/1] test_distutils
Ran 0 tests in 0.001s
OK
Warning -- warnings.filters was modified by test_distutils
Before: (140048876788832, [], [])
After: (140048876788832, [], [('ignore', None, <class 'pkg_resources.PEP440Warning'>, None, 0)])
test_distutils run no tests
== Tests result: NO TEST RUN ==
1 test run no tests:
test_distutils
Total duration: 655 ms
Tests result: NO TEST RUN
The problem comes from Lib/distutils/tests/test_check.py: "from distutils.command.check import check, HAS_DOCUTILS" imports indirectly the docutils module which imports pkg_resources.
pkg_resources changes warnings filters.
docutils is installed by python3-docutils-0.15.2-1.fc31.noarch package and pkg_resources comes from python3-setuptools-41.6.0-1.fc31.noarch package.
Attached PR disables docutils to avoid side effects of "import docutils" like pkg_resources modifying warnings filters.
Activity
vstinner commented on Mar 24, 2020
Even when no test is run, test_distutils alters the environment:
$ ./python -m test -v --fail-env-changed test_distutils -m DONTEXISTS == CPython 3.7.7+ (heads/3.7:1cdc61c767, Mar 24 2020, 17:25:30) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] == Linux-5.5.9-200.fc31.x86_64-x86_64-with-fedora-31-Thirty_One little-endian == cwd: /home/vstinner/python/3.7/build/test_python_157151 == CPU count: 8 == encodings: locale=UTF-8, FS=utf-8 0:00:00 load avg: 0.37 Run tests sequentially 0:00:00 load avg: 0.37 [1/1] test_distutilsRan 0 tests in 0.001s
OK
Warning -- warnings.filters was modified by test_distutils
Before: (140048876788832, [], [])
After: (140048876788832, [], [('ignore', None, <class 'pkg_resources.PEP440Warning'>, None, 0)])
test_distutils run no tests
== Tests result: NO TEST RUN ==
1 test run no tests:
test_distutils
Total duration: 655 ms
Tests result: NO TEST RUN
The problem comes from Lib/distutils/tests/test_check.py: "from distutils.command.check import check, HAS_DOCUTILS" imports indirectly the docutils module which imports pkg_resources.
pkg_resources changes warnings filters.
docutils is installed by python3-docutils-0.15.2-1.fc31.noarch package and pkg_resources comes from python3-setuptools-41.6.0-1.fc31.noarch package.
Attached PR disables docutils to avoid side effects of "import docutils" like pkg_resources modifying warnings filters.
vstinner commented on Mar 24, 2020
Here is the line which alters warnings filters:
$ grep warnings /usr/lib/python3.7/site-packages/pkg_resources/__init__.py (...) warnings.filterwarnings("ignore", category=PEP440Warning, append=True)vstinner commented on May 15, 2020
New changeset 6e57237 by Victor Stinner in branch 'master':
bpo-40055: test_distutils leaves warnings filters unchanged (GH-20095)
6e57237
miss-islington commented on May 15, 2020
New changeset 7ef2751 by Miss Islington (bot) in branch '3.7':
bpo-40055: test_distutils leaves warnings filters unchanged (GH-20095)
7ef2751
miss-islington commented on May 15, 2020
New changeset 4e6545b by Miss Islington (bot) in branch '3.8':
bpo-40055: test_distutils leaves warnings filters unchanged (GH-20095)
4e6545b
gh-95349: Hide a Distutils Warning Filter for test_check_c_globals (G…
pythongh-95349: Hide a Distutils Warning Filter for test_check_c_glob…
gh-95349: Hide a Distutils Warning Filter for test_check_c_globals (G…
pythongh-95349: Hide a Distutils Warning Filter for test_check_c_glob…
gh-95349: Hide a Distutils Warning Filter for test_check_c_globals (G…
pythongh-95349: Hide a Distutils Warning Filter for test_check_c_glob…