Как я могу определить пользовательскую магию в jupyter при установке pip

Это расширение этого вопроса Я хочу установить SAS Magic при установке ядра SAS через pip. Он зарегистрируется, если я импортирую пакет from sas_kernel.magics import sas_magic

но я хочу, чтобы он был доступен без импорта. Я использую юпитер 4.0.6

Вот фрагмент кода:

from __future__ import print_function
import IPython.core.magic as ipym
from saspy.SASLogLexer import *
import re
import os

@ipym.magics_class
class SASMagic(ipym.Magics):

    @ipym.cell_magic
    def SAS(self,line,cell):
        '''
        %%SAS - send the code in the cell to a SAS Server
        '''
        executable = os.environ.get('SAS_EXECUTABLE', 'sas')
        if executable=='sas':
            executable='/usr/local/SASHome/SASFoundation/9.4/sas'
        e2=executable.split('/')
        _path='/'.join(e2[0:e2.index('SASHome')+1])
        _version=e2[e2.index('SASFoundation')+1]
        import saspy as saspy
        self.mva=saspy.SAS_session()
        self.mva._startsas(path=_path, version=_version)

        res=self.mva.submit(cell,'html')
        output=self._clean_output(res['LST'])
        log=self._clean_log(res['LOG'])
        dis=self._which_display(log,output)
        return dis

from IPython import get_ipython
get_ipython().register_magics(SASMagic)

person Jared    schedule 20.01.2016    source источник
comment
Является ли sas_kernel производным от ядра IPython? Если это так, в вашем подклассе вы можете добавить это к инициализации ядра.   -  person minrk    schedule 20.01.2016
comment
@minrk sas_kernel является производным от метаядра, которое является производным от ядра. То есть вы говорите, что я могу добавить его в метод init sas_kernel, и он будет зарегистрирован после запуска pip install sas_kernel ? Извините за элементарный вопрос, как будет выглядеть код в sas_kernel.__init__?   -  person Jared    schedule 28.01.2016


Ответы (1)


Поскольку ваше ядро ​​получено из MetaKernel, вы можете зарегистрировать магию в своем Kernel.__init__:

from .sasmagic import SASMagic

class SASKernel(MetaKernel):
    def __init__(self, **kwargs):
        super(SASKernel, self).__init__(**kwargs)
        self.register_magics(SASMagic)

(Я предполагаю немного, так как я не вижу ваш код, но это будет выглядеть примерно так, если предположить, что ваше определение SASMagic находится в sasmagic.py рядом с вашим определением класса ядра.

person minrk    schedule 01.02.2016