Skip to content

python3Packages.ipython is failing on x86_64-darwin (master) #160133

@sternenseemann

Description

@sternenseemann

On current master, ipython fails on darwin, causing a lot of regressions in reverse dependencies: https://hydra.nixos.org/build/167040494

Executing pytestCheckPhase
============================= test session starts ==============================
platform darwin -- Python 3.9.10, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /private/tmp/nix-build-python3.9-ipython-8.0.1.drv-0/ipython-8.0.1, configfile: pytest.ini
collected 1024 items / 2 skipped / 1022 selected                               hon-8.0.1�

IPython/core/completer.py ss                                             [  0%]
IPython/core/debugger.py s                                               [  0%]
IPython/core/display_functions.py .                                      [  0%]
IPython/core/excolors.py .                                               [  0%]
IPython/core/history.py .                                                [  0%]
IPython/core/interactiveshell.py .ss                                     [  0%]
IPython/core/oinspect.py s                                               [  0%]
IPython/core/magics/auto.py s                                            [  1%]
IPython/core/magics/basic.py ss                                          [  1%]
IPython/core/magics/code.py s.                                           [  1%]
IPython/core/magics/config.py .                                          [  1%]
IPython/core/magics/execution.py sssss                                   [  2%]
IPython/core/magics/history.py s                                         [  2%]
IPython/core/magics/namespace.py s..sss                                  [  2%]
IPython/core/magics/osm.py ssss                                          [  3%]
IPython/core/magics/pylab.py s                                           [  3%]
IPython/core/magics/script.py .                                          [  3%]
IPython/core/tests/test_alias.py ....                                    [  3%]
IPython/core/tests/test_application.py ...                               [  4%]
IPython/core/tests/test_async_helpers.py .ssss.....                      [  4%]
IPython/core/tests/test_autocall.py ..                                   [  5%]
IPython/core/tests/test_compilerop.py ......                             [  5%]
IPython/core/tests/test_completer.py .............s..................... [  9%]
...................s..                                                   [ 11%]
IPython/core/tests/test_completerlib.py ............                     [ 12%]
IPython/core/tests/test_debugger.py ............                         [ 13%]
IPython/core/tests/test_display.py ........sss..............             [ 16%]
IPython/core/tests/test_displayhook.py .......                           [ 16%]
IPython/core/tests/test_events.py ......                                 [ 17%]
IPython/core/tests/test_extension.py ...                                 [ 17%]
IPython/core/tests/test_formatters.py ..............................     [ 20%]
IPython/core/tests/test_handlers.py .                                    [ 20%]
IPython/core/tests/test_history.py ........                              [ 21%]
IPython/core/tests/test_hooks.py ...                                     [ 21%]
IPython/core/tests/test_imports.py .................                     [ 23%]
IPython/core/tests/test_inputsplitter.py ............................... [ 26%]
.........................................                                [ 30%]
IPython/core/tests/test_inputtransformer.py .................            [ 32%]
IPython/core/tests/test_inputtransformer2.py ........................... [ 34%]
...                                                                      [ 35%]
IPython/core/tests/test_inputtransformer2_line.py ......                 [ 35%]
IPython/core/tests/test_interactiveshell.py ............................ [ 38%]
..............s.....s....s.......................                        [ 43%]
IPython/core/tests/test_iplib.py ........                                [ 43%]
IPython/core/tests/test_logger.py ..                                     [ 44%]
IPython/core/tests/test_magic.py .....................s................. [ 47%]
................s.....................ssss...................            [ 53%]
IPython/core/tests/test_magic_arguments.py .                             [ 54%]
IPython/core/tests/test_magic_terminal.py ...........                    [ 55%]
IPython/core/tests/test_oinspect.py .............................        [ 57%]
IPython/core/tests/test_page.py .                                        [ 58%]
IPython/core/tests/test_paths.py ...........                             [ 59%]
IPython/core/tests/test_prefilter.py ......                              [ 59%]
IPython/core/tests/test_profile.py .....                                 [ 60%]
IPython/core/tests/test_prompts.py ...                                   [ 60%]
IPython/core/tests/test_run.py .....s............ss.................     [ 64%]
IPython/core/tests/test_shellapp.py ...                                  [ 64%]
IPython/core/tests/test_splitinput.py ..                                 [ 64%]
IPython/core/tests/test_ultratb.py ....................                  [ 66%]
IPython/extensions/autoreload.py s                                       [ 66%]
IPython/extensions/storemagic.py s                                       [ 66%]
IPython/extensions/tests/test_autoreload.py .s.....                      [ 67%]
IPython/extensions/tests/test_storemagic.py ..                           [ 67%]
IPython/external/tests/test_qt_loaders.py .                              [ 67%]
IPython/lib/display.py s                                                 [ 67%]
IPython/lib/lexers.py .                                                  [ 67%]
IPython/lib/security.py ..                                               [ 68%]
IPython/lib/tests/test_backgroundjobs.py ....                            [ 68%]
IPython/lib/tests/test_clipboard.py F                                    [ 68%]
IPython/lib/tests/test_deepreload.py ...                                 [ 68%]
IPython/lib/tests/test_display.py ..............ss.sssss.ssss.           [ 71%]
IPython/lib/tests/test_editorhooks.py .                                  [ 71%]
IPython/lib/tests/test_imports.py ...                                    [ 71%]
IPython/lib/tests/test_latextools.py ..sssssss...s.                      [ 73%]
IPython/lib/tests/test_lexers.py .                                       [ 73%]
IPython/lib/tests/test_pretty.py ...................................     [ 76%]
IPython/lib/tests/test_security.py ....                                  [ 77%]
IPython/terminal/magics.py s                                             [ 77%]
IPython/terminal/tests/test_debug_magic.py .                             [ 77%]
IPython/terminal/tests/test_embed.py ..                                  [ 77%]
IPython/terminal/tests/test_help.py ......s                              [ 78%]
IPython/terminal/tests/test_interactivshell.py ........                  [ 79%]
IPython/testing/tools.py ..                                              [ 79%]
IPython/testing/plugin/dtexample.py .......                              [ 79%]
IPython/testing/plugin/simple.py ..                                      [ 80%]
IPython/testing/plugin/test_combo.txt .                                  [ 80%]
IPython/testing/plugin/test_example.txt ..                               [ 80%]
IPython/testing/plugin/test_exampleip.txt .                              [ 80%]
IPython/testing/plugin/test_ipdoctest.py .....                           [ 80%]
IPython/testing/plugin/test_refs.py ....                                 [ 81%]
IPython/testing/tests/test_decorators.py .ss..s.ss....s                  [ 82%]
IPython/testing/tests/test_ipunittest.py .....                           [ 83%]
IPython/testing/tests/test_tools.py .s........                           [ 84%]
IPython/utils/contexts.py .                                              [ 84%]
IPython/utils/frame.py .                                                 [ 84%]
IPython/utils/ipstruct.py ...........                                    [ 85%]
IPython/utils/path.py .                                                  [ 85%]
IPython/utils/strdispatch.py .                                           [ 85%]
IPython/utils/sysinfo.py .                                               [ 85%]
IPython/utils/text.py ........                                           [ 86%]
IPython/utils/tests/test_capture.py ........................             [ 88%]
IPython/utils/tests/test_decorators.py .                                 [ 88%]
IPython/utils/tests/test_dir2.py ....                                    [ 89%]
IPython/utils/tests/test_imports.py ......                               [ 89%]
IPython/utils/tests/test_importstring.py ...                             [ 90%]
IPython/utils/tests/test_io.py ...                                       [ 90%]
IPython/utils/tests/test_module_paths.py ......                          [ 91%]
IPython/utils/tests/test_openpy.py ...                                   [ 91%]
IPython/utils/tests/test_path.py ss...s.....s.....s.......s              [ 93%]
IPython/utils/tests/test_process.py .s..s........                        [ 95%]
IPython/utils/tests/test_pycolorize.py ........                          [ 95%]
IPython/utils/tests/test_sysinfo.py ..                                   [ 96%]
IPython/utils/tests/test_tempdir.py ..                                   [ 96%]
IPython/utils/tests/test_text.py ...........                             [ 97%]
IPython/utils/tests/test_tokenutil.py ...................                [ 99%]
IPython/utils/tests/test_wildcard.py ......

=================================== FAILURES ===================================
______________________________ test_clipboard_get ______________________________

    @skip_if_no_x11
    def test_clipboard_get():
        # Smoketest for clipboard access - we can't easily guarantee that the
        # clipboard is accessible and has something on it, but this tries to
        # exercise the relevant code anyway.
        try:
>           a = get_ipython().hooks.clipboard_get()

IPython/lib/tests/test_clipboard.py:11: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
IPython/core/hooks.py:116: in __call__
    return cmd(*args, **kw)
IPython/core/hooks.py:170: in clipboard_get
    text = dispatcher()
IPython/core/hooks.py:116: in __call__
    return cmd(*args, **kw)
IPython/lib/clipboard.py:38: in osx_clipboard_get
    p = subprocess.Popen(['pbpaste', '-Prefer', 'ascii'],
/nix/store/z740mapbgfi953b61jx72c0jy3phfcy8-python3-3.9.10/lib/python3.9/subprocess.py:951: in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Popen: returncode: 255 args: ['pbpaste', '-Prefer', 'ascii']>
args = ['pbpaste', '-Prefer', 'ascii'], executable = b'pbpaste'
preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
startupinfo = None, creationflags = 0, shell = False, p2cread = -1
p2cwrite = -1, c2pread = 50, c2pwrite = 51, errread = -1, errwrite = -1
restore_signals = True, gid = None, gids = None, uid = None, umask = -1
start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals,
                       gid, gids, uid, umask,
                       start_new_session):
        """Execute program (POSIX version)"""
    
        if isinstance(args, (str, bytes)):
            args = [args]
        elif isinstance(args, os.PathLike):
            if shell:
                raise TypeError('path-like args is not allowed when '
                                'shell is true')
            args = [args]
        else:
            args = list(args)
    
        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/nix/store/vssrny41k0mr33jclrrn67rxhbdpwrr0-bash-5.1-p12/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable
    
        if executable is None:
            executable = args[0]
    
        sys.audit("subprocess.Popen", executable, args, cwd, env)
    
        if (_USE_POSIX_SPAWN
                and os.path.dirname(executable)
                and preexec_fn is None
                and not close_fds
                and not pass_fds
                and cwd is None
                and (p2cread == -1 or p2cread > 2)
                and (c2pwrite == -1 or c2pwrite > 2)
                and (errwrite == -1 or errwrite > 2)
                and not start_new_session
                and gid is None
                and gids is None
                and uid is None
                and umask < 0):
            self._posix_spawn(args, executable, env, restore_signals,
                              p2cread, p2cwrite,
                              c2pread, c2pwrite,
                              errread, errwrite)
            return
    
        orig_executable = executable
    
        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()
    
                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session,
                        gid, gids, uid, umask,
                        preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)
    
            self._close_pipe_fds(p2cread, p2cwrite,
                                 c2pread, c2pwrite,
                                 errread, errwrite)
    
            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)
    
        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass
    
            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 'pbpaste'

/nix/store/z740mapbgfi953b61jx72c0jy3phfcy8-python3-3.9.10/lib/python3.9/subprocess.py:1821: FileNotFoundError
=============================== warnings summary ===============================
../../../../nix/store/1y3zjj082kfdnf15fi3q8g3h4jgy15qa-python3.9-setuptools-57.2.0/lib/python3.9/site-packages/setuptools/lib2to3_ex.py:10
  /nix/store/1y3zjj082kfdnf15fi3q8g3h4jgy15qa-python3.9-setuptools-57.2.0/lib/python3.9/site-packages/setuptools/lib2to3_ex.py:10: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+
    from lib2to3.refactor import RefactoringTool, get_fixers_from_package

../../../../nix/store/cz0q1l88g8p5bc9jr20677nd5yfjfsar-python3.9-pytest-6.2.5/lib/python3.9/site-packages/_pytest/nodes.py:274
  /nix/store/cz0q1l88g8p5bc9jr20677nd5yfjfsar-python3.9-pytest-6.2.5/lib/python3.9/site-packages/_pytest/nodes.py:274: PytestUnknownMarkWarning: Unknown pytest.mark.asyncio - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
    marker_ = getattr(MARK_GEN, marker)

IPython/core/tests/test_inputtransformer2.py::test_check_make_token_by_line_never_ends_empty
  /private/tmp/nix-build-python3.9-ipython-8.0.1.drv-0/ipython-8.0.1/IPython/core/inputtransformer2.py:512: UserWarning: `make_tokens_by_line` received a list of lines which do not have lineending markers ('\n', '\r', '\r\n', '\x0b', '\x0c'), behavior will be unspecified
    warnings.warn("`make_tokens_by_line` received a list of lines which do not have lineending markers ('\\n', '\\r', '\\r\\n', '\\x0b', '\\x0c'), behavior will be unspecified")

IPython/core/tests/test_interactiveshell.py::test_run_cell_async
  /nix/store/z740mapbgfi953b61jx72c0jy3phfcy8-python3-3.9.10/lib/python3.9/asyncio/events.py:80: DeprecationWarning: `run_cell_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
    self._context.run(self._callback, *self._args)

IPython/core/tests/test_interactiveshell.py::test_should_run_async
  /private/tmp/nix-build-python3.9-ipython-8.0.1.drv-0/ipython-8.0.1/IPython/core/tests/test_interactiveshell.py:1078: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
    assert not ip.should_run_async("a = 5")

IPython/core/tests/test_interactiveshell.py::test_should_run_async
  /private/tmp/nix-build-python3.9-ipython-8.0.1.drv-0/ipython-8.0.1/IPython/core/tests/test_interactiveshell.py:1079: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
    assert ip.should_run_async("await x")

IPython/core/tests/test_interactiveshell.py::test_should_run_async
  /private/tmp/nix-build-python3.9-ipython-8.0.1.drv-0/ipython-8.0.1/IPython/core/tests/test_interactiveshell.py:1080: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
    assert ip.should_run_async("import asyncio; await asyncio.sleep(1)")

IPython/core/tests/test_magic.py::test_script_bg_out
IPython/core/tests/test_magic.py::test_script_bg_err
IPython/core/tests/test_magic.py::test_script_bg_out_err
IPython/core/tests/test_magic.py::test_script_bg_proc
  /nix/store/cz0q1l88g8p5bc9jr20677nd5yfjfsar-python3.9-pytest-6.2.5/lib/python3.9/site-packages/_pytest/python.py:172: PytestUnhandledCoroutineWarning: async def functions are not natively supported and have been skipped.
  You need to install a suitable plugin for your async framework, for example:
    - anyio
    - pytest-asyncio
    - pytest-tornasync
    - pytest-trio
    - pytest-twisted
    warnings.warn(PytestUnhandledCoroutineWarning(msg.format(nodeid)))

-- Docs: https://docs.pytest.org/en/stable/warnings.html
============================= slowest 10 durations =============================
12.94s call     IPython/core/tests/test_debugger.py::test_decorator_skip_disabled
4.50s call     IPython/core/tests/test_debugger.py::test_decorator_skip
4.35s call     IPython/core/tests/test_debugger.py::test_decorator_skip_with_breakpoint
3.72s call     IPython/extensions/tests/test_autoreload.py::TestAutoreload::test_autoload_newly_added_objects
3.51s call     IPython/extensions/tests/test_autoreload.py::TestAutoreload::test_smoketest_autoreload
3.45s call     IPython/extensions/tests/test_autoreload.py::TestAutoreload::test_smoketest_aimport
2.52s call     IPython/core/tests/test_debugger.py::test_xmode_skip
2.03s call     IPython/terminal/tests/test_debug_magic.py::test_debug_magic_passes_through_generators
2.00s call     IPython/core/tests/test_debugger.py::test_where_erase_value
1.79s call     IPython/terminal/tests/test_embed.py::test_nest_embed
=========================== short test summary info ============================
FAILED IPython/lib/tests/test_clipboard.py::test_clipboard_get - FileNotFound...
====== 1 failed, 937 passed, 88 skipped, 11 warnings in 82.56s (0:01:22) =======
builder for '/nix/store/b12vfj0ygcfgk42hg39krrc6gk49qbih-python3.9-ipython-8.0.1.drv' failed with exit code 1

Notify maintainers

cc @FRidh @bjornfor @NixOS/darwin-maintainers

Metadata

Metadata

Assignees

No one assigned

    Labels

    0.kind: bugSomething is broken6.topic: darwinRunning or building packages on Darwin6.topic: pythonPython is a high-level, general-purpose programming language.
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions