You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			145 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
# PYTHON_ARGCOMPLETE_OK
 | 
						|
"""
 | 
						|
IPython: tools for interactive and parallel computing in Python.
 | 
						|
 | 
						|
https://ipython.org
 | 
						|
"""
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
#  Copyright (c) 2008-2011, IPython Development Team.
 | 
						|
#  Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
 | 
						|
#  Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
 | 
						|
#  Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
 | 
						|
#
 | 
						|
#  Distributed under the terms of the Modified BSD License.
 | 
						|
#
 | 
						|
#  The full license is in the file COPYING.txt, distributed with this software.
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
# Imports
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
import sys
 | 
						|
import warnings
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
# Setup everything
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
# Don't forget to also update setup.py when this changes!
 | 
						|
if sys.version_info < (3, 11):
 | 
						|
    raise ImportError(
 | 
						|
        """
 | 
						|
IPython 8.31+ supports Python 3.11 and above, following SPEC0
 | 
						|
IPython 8.19+ supports Python 3.10 and above, following SPEC0.
 | 
						|
IPython 8.13+ supports Python 3.9 and above, following NEP 29.
 | 
						|
IPython 8.0-8.12 supports Python 3.8 and above, following NEP 29.
 | 
						|
When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
 | 
						|
Python 3.3 and 3.4 were supported up to IPython 6.x.
 | 
						|
Python 3.5 was supported with IPython 7.0 to 7.9.
 | 
						|
Python 3.6 was supported with IPython up to 7.16.
 | 
						|
Python 3.7 was still supported with the 7.x branch.
 | 
						|
 | 
						|
See IPython `README.rst` file for more information:
 | 
						|
 | 
						|
    https://github.com/ipython/ipython/blob/main/README.rst
 | 
						|
 | 
						|
"""
 | 
						|
    )
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
# Setup the top level names
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
from .core.getipython import get_ipython
 | 
						|
from .core import release
 | 
						|
from .core.application import Application
 | 
						|
from .terminal.embed import embed
 | 
						|
 | 
						|
from .core.interactiveshell import InteractiveShell
 | 
						|
from .utils.sysinfo import sys_info
 | 
						|
from .utils.frame import extract_module_locals
 | 
						|
 | 
						|
__all__ = ["start_ipython", "embed", "embed_kernel"]
 | 
						|
 | 
						|
# Release data
 | 
						|
__author__ = '%s <%s>' % (release.author, release.author_email)
 | 
						|
__license__  = release.license
 | 
						|
__version__  = release.version
 | 
						|
version_info = release.version_info
 | 
						|
# list of CVEs that should have been patched in this release.
 | 
						|
# this is informational and should not be relied upon.
 | 
						|
__patched_cves__ = {"CVE-2022-21699", "CVE-2023-24816"}
 | 
						|
 | 
						|
 | 
						|
def embed_kernel(module=None, local_ns=None, **kwargs):
 | 
						|
    """Embed and start an IPython kernel in a given scope.
 | 
						|
 | 
						|
    If you don't want the kernel to initialize the namespace
 | 
						|
    from the scope of the surrounding function,
 | 
						|
    and/or you want to load full IPython configuration,
 | 
						|
    you probably want `IPython.start_kernel()` instead.
 | 
						|
 | 
						|
    This is a deprecated alias for `ipykernel.embed.embed_kernel()`,
 | 
						|
    to be removed in the future.
 | 
						|
    You should import directly from `ipykernel.embed`; this wrapper
 | 
						|
    fails anyway if you don't have `ipykernel` package installed.
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    module : types.ModuleType, optional
 | 
						|
        The module to load into IPython globals (default: caller)
 | 
						|
    local_ns : dict, optional
 | 
						|
        The namespace to load into IPython user namespace (default: caller)
 | 
						|
    **kwargs : various, optional
 | 
						|
        Further keyword args are relayed to the IPKernelApp constructor,
 | 
						|
        such as `config`, a traitlets :class:`Config` object (see :ref:`configure_start_ipython`),
 | 
						|
        allowing configuration of the kernel.  Will only have an effect
 | 
						|
        on the first embed_kernel call for a given process.
 | 
						|
    """
 | 
						|
 | 
						|
    warnings.warn(
 | 
						|
        "import embed_kernel from ipykernel.embed directly (since 2013)."
 | 
						|
        " Importing from IPython will be removed in the future",
 | 
						|
        DeprecationWarning,
 | 
						|
        stacklevel=2,
 | 
						|
    )
 | 
						|
 | 
						|
    (caller_module, caller_locals) = extract_module_locals(1)
 | 
						|
    if module is None:
 | 
						|
        module = caller_module
 | 
						|
    if local_ns is None:
 | 
						|
        local_ns = dict(**caller_locals)
 | 
						|
    
 | 
						|
    # Only import .zmq when we really need it
 | 
						|
    from ipykernel.embed import embed_kernel as real_embed_kernel
 | 
						|
    real_embed_kernel(module=module, local_ns=local_ns, **kwargs)
 | 
						|
 | 
						|
def start_ipython(argv=None, **kwargs):
 | 
						|
    """Launch a normal IPython instance (as opposed to embedded)
 | 
						|
 | 
						|
    `IPython.embed()` puts a shell in a particular calling scope,
 | 
						|
    such as a function or method for debugging purposes,
 | 
						|
    which is often not desirable.
 | 
						|
 | 
						|
    `start_ipython()` does full, regular IPython initialization,
 | 
						|
    including loading startup files, configuration, etc.
 | 
						|
    much of which is skipped by `embed()`.
 | 
						|
 | 
						|
    This is a public API method, and will survive implementation changes.
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    argv : list or None, optional
 | 
						|
        If unspecified or None, IPython will parse command-line options from sys.argv.
 | 
						|
        To prevent any command-line parsing, pass an empty list: `argv=[]`.
 | 
						|
    user_ns : dict, optional
 | 
						|
        specify this dictionary to initialize the IPython user namespace with particular values.
 | 
						|
    **kwargs : various, optional
 | 
						|
        Any other kwargs will be passed to the Application constructor,
 | 
						|
        such as `config`, a traitlets :class:`Config` object (see :ref:`configure_start_ipython`),
 | 
						|
        allowing configuration of the instance (see :ref:`terminal_options`).
 | 
						|
    """
 | 
						|
    from IPython.terminal.ipapp import launch_new_instance
 | 
						|
    return launch_new_instance(argv=argv, **kwargs)
 |