Bug#1082316: spyder-line-profiler FTBFS with Python 3.13

Stefano Rivera stefanor at debian.org
Thu Sep 19 21:06:02 BST 2024


Source: spyder-line-profiler
Version: 0.3.2-2
Severity: normal
User: debian-python at lists.debian.org
Usertags: python3.13

This package failed build from source when test-built against a version of
python3-defaults that includes 3.13 as a supported version.

To reproduce this issue, build against python3-defaults (python3-all-dev etc.)
from Debian experimental.

What's new in Python 3.13:
https://docs.python.org/3.13/whatsnew/3.13.html

Log snippet:

   dh_auto_test -O--buildsystem=pybuild
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build; python3.13 -m pytest 
============================= test session starts ==============================
platform linux -- Python 3.13.0rc2, pytest-8.3.3, pluggy-1.5.0
PyQt5 5.15.11 -- Qt runtime 5.15.13 -- Qt compiled 5.15.13
rootdir: /<<PKGBUILDDIR>>
plugins: qt-4.3.1, xvfb-3.0.0, typeguard-4.3.0
collected 2 items

spyder_line_profiler/tests/test_lineprofiler.py F                        [ 50%]
tests/test_lineprofiler.py F                                             [100%]

=================================== FAILURES ===================================
_______________________ test_profile_and_display_results _______________________

qtbot = <pytestqt.qtbot.QtBot object at 0xffffb43616a0>
tmpdir = local('/tmp/pytest-of-debusine-worker/pytest-0/test_profile_and_display_resul0')

    def test_profile_and_display_results(qtbot, tmpdir):
        """Run profiler on simple script and check that results are okay."""
        os.chdir(tmpdir.strpath)
        testfilename = tmpdir.join('test_foo.py').strpath
    
        with open(testfilename, 'w') as f:
            f.write(TEST_SCRIPT)
    
        MockQMessageBox = Mock()
    
        widget = SpyderLineProfilerWidget(None)
        with patch.object(widget, 'get_conf',
                          return_value=sys.executable) as mock_get_conf:
            widget.setup()
            qtbot.addWidget(widget)
>           with qtbot.waitSignal(widget.sig_finished, timeout=10000,
                                  raising=True):
E                                 pytestqt.exceptions.TimeoutError: Signal sig_finished() not emitted after 10000 ms

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/tests/test_lineprofiler.py:50: TimeoutError
_______________________ test_profile_and_display_results _______________________

qtbot = <pytestqt.qtbot.QtBot object at 0xffffb22d4690>
tmpdir = local('/tmp/pytest-of-debusine-worker/pytest-0/test_profile_and_display_resul1')

    def test_profile_and_display_results(qtbot, tmpdir):
        """Run profiler on simple script and check that results are okay."""
        os.chdir(tmpdir.strpath)
        testfilename = tmpdir.join('test_foo.py').strpath
    
        with open(testfilename, 'w') as f:
            f.write(TEST_SCRIPT)
    
        MockQMessageBox = Mock()
    
        widget = SpyderLineProfilerWidget(None)
        with patch.object(widget, 'get_conf',
                          return_value=sys.executable) as mock_get_conf:
            widget.setup()
            qtbot.addWidget(widget)
>           with qtbot.waitSignal(widget.sig_finished, timeout=10000,
                                  raising=True):
E                                 pytestqt.exceptions.TimeoutError: Signal sig_finished() not emitted after 10000 ms

/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py:50: TimeoutError
=============================== warnings summary ===============================
../../../../../../usr/lib/python3/dist-packages/spyder/config/base.py:432
  /usr/lib/python3/dist-packages/spyder/config/base.py:432: DeprecationWarning: 'locale.getdefaultlocale' is deprecated and slated for removal in Python 3.15. Use setlocale(), getencoding() and getlocale() instead.
    locale_language = locale.getdefaultlocale()[0]

../../../../../../usr/lib/python3/dist-packages/spyder/utils/programs.py:27
  /usr/lib/python3/dist-packages/spyder/utils/programs.py:27: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

../../../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154
  /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb3fe9010> with id main_toolbar under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb3feb530> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb3feb530> should have a different id_. See 
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb3fe9370> with id ('corner_toolbar',) under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb2313020> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb2313020> should have a different id_. See 
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.menus.MainWidgetMenu object at 0xffffb3fe9520> with id options_menu under the context __global of plugin main. The new reference <spyder.api.widgets.menus.MainWidgetMenu object at 0xffffb23131d0> will overwrite the previous reference. Hint: <spyder.api.widgets.menus.MainWidgetMenu object at 0xffffb23131d0> should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/main_widget.py:273
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Profile by line') with id run_action under the context __global of plugin main. The new reference SpyderAction('Profile by line') will overwrite the previous reference. Hint: SpyderAction('Profile by line') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:218
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Stop') with id stop_action under the context __global of plugin main. The new reference SpyderAction('Stop') will overwrite the previous reference. Hint: SpyderAction('Stop') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:225
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Open Script') with id browse_action under the context __global of plugin main. The new reference SpyderAction('Open Script') will overwrite the previous reference. Hint: SpyderAction('Open Script') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:232
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Show Result') with id show_output_action under the context __global of plugin main. The new reference SpyderAction('Show Result') will overwrite the previous reference. Hint: SpyderAction('Show Result') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:239
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Collaps') with id collapse_action under the context __global of plugin main. The new reference SpyderAction('Collaps') will overwrite the previous reference. Hint: SpyderAction('Collaps') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:246
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Expand') with id expand_action under the context __global of plugin main. The new reference SpyderAction('Expand') will overwrite the previous reference. Hint: SpyderAction('Expand') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:253
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Save data') with id save_data_action under the context __global of plugin main. The new reference SpyderAction('Save data') will overwrite the previous reference. Hint: SpyderAction('Save data') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:260
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Clear output') with id clear_action under the context __global of plugin main. The new reference SpyderAction('Clear output') will overwrite the previous reference. Hint: SpyderAction('Clear output') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:267
    warnings.warn(

.pybuild/cpython3_3.13_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb3feab10> with id information_toolbar under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb2313bf0> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffffb2313bf0> should have a different id_. See /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:292
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED spyder_line_profiler/tests/test_lineprofiler.py::test_profile_and_display_results
FAILED tests/test_lineprofiler.py::test_profile_and_display_results - pytestq...
======================= 2 failed, 15 warnings in 21.07s ========================
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spyder-line-profiler/build; python3.13 -m pytest 
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build; python3.12 -m pytest 
============================= test session starts ==============================
platform linux -- Python 3.12.6, pytest-8.3.3, pluggy-1.5.0
PyQt5 5.15.11 -- Qt runtime 5.15.13 -- Qt compiled 5.15.13
rootdir: /<<PKGBUILDDIR>>
plugins: qt-4.3.1, xvfb-3.0.0, typeguard-4.3.0
collected 2 items

spyder_line_profiler/tests/test_lineprofiler.py .                        [ 50%]
tests/test_lineprofiler.py .                                             [100%]

=============================== warnings summary ===============================
../../../../../../usr/lib/python3/dist-packages/spyder/config/base.py:432
  /usr/lib/python3/dist-packages/spyder/config/base.py:432: DeprecationWarning: 'locale.getdefaultlocale' is deprecated and slated for removal in Python 3.15. Use setlocale(), getencoding() and getlocale() instead.
    locale_language = locale.getdefaultlocale()[0]

../../../../../../usr/lib/python3/dist-packages/spyder/utils/programs.py:27
  /usr/lib/python3/dist-packages/spyder/utils/programs.py:27: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

../../../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154
  /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8c5534a0> with id main_toolbar under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a74deb0> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a74deb0> should have a different id_. See 
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8c553800> with id ('corner_toolbar',) under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a7fdc70> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a7fdc70> should have a different id_. See 
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.menus.MainWidgetMenu object at 0xffff8c5539b0> with id options_menu under the context __global of plugin main. The new reference <spyder.api.widgets.menus.MainWidgetMenu object at 0xffff8a7fde20> will overwrite the previous reference. Hint: <spyder.api.widgets.menus.MainWidgetMenu object at 0xffff8a7fde20> should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/main_widget.py:273
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Profile by line') with id run_action under the context __global of plugin main. The new reference SpyderAction('Profile by line') will overwrite the previous reference. Hint: SpyderAction('Profile by line') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:218
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Stop') with id stop_action under the context __global of plugin main. The new reference SpyderAction('Stop') will overwrite the previous reference. Hint: SpyderAction('Stop') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:225
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Open Script') with id browse_action under the context __global of plugin main. The new reference SpyderAction('Open Script') will overwrite the previous reference. Hint: SpyderAction('Open Script') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:232
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Show Result') with id show_output_action under the context __global of plugin main. The new reference SpyderAction('Show Result') will overwrite the previous reference. Hint: SpyderAction('Show Result') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:239
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Collaps') with id collapse_action under the context __global of plugin main. The new reference SpyderAction('Collaps') will overwrite the previous reference. Hint: SpyderAction('Collaps') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:246
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Expand') with id expand_action under the context __global of plugin main. The new reference SpyderAction('Expand') will overwrite the previous reference. Hint: SpyderAction('Expand') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:253
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Save data') with id save_data_action under the context __global of plugin main. The new reference SpyderAction('Save data') will overwrite the previous reference. Hint: SpyderAction('Save data') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:260
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference SpyderAction('Clear output') with id clear_action under the context __global of plugin main. The new reference SpyderAction('Clear output') will overwrite the previous reference. Hint: SpyderAction('Clear output') should have a different id_. See /usr/lib/python3/dist-packages/spyder/api/widgets/mixins.py:439, /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:267
    warnings.warn(

.pybuild/cpython3_3.12_spyder-line-profiler/build/tests/test_lineprofiler.py::test_profile_and_display_results
  /usr/lib/python3/dist-packages/spyder/utils/registries.py:81: UserWarning: There already exists a reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a74d010> with id information_toolbar under the context __global of plugin main. The new reference <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a7fe8d0> will overwrite the previous reference. Hint: <spyder.api.widgets.toolbars.MainWidgetToolbar object at 0xffff8a7fe8d0> should have a different id_. See /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_spyder-line-profiler/build/spyder_line_profiler/spyder/widgets.py:292
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================== 2 passed, 15 warnings in 3.47s ========================
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 3.12" returned exit code 13
make: *** [debian/rules:9: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
Build finished at 2024-09-19T13:33:08Z


If required, the full build log is available here (for the next 30 days):
https://debusine.debian.net/artifact/794222/

This bug has been filed at "normal" severity, as we haven't started the
transition to add 3.13 as a supported version, yet. This will be raised to RC
as soon as that happens, hopefully well before trixie.

Thanks,

Stefano



More information about the debian-science-maintainers mailing list