2017-09-22 1 views
0

저는 시스템 설계를 위해 많은 수의 Jupyter 노트북을 사용합니다. 나는 내가 시작하는 각 노트북에 대해 내 환경을 설정하기 위해 똑같은 일을하고 있음을 알게되었다. 그래서 나는 나를 위해 모든 것을 수행하는 기능을 만들 것이라고 생각했다. 모듈 목록을 원하는 네임 스페이스로 가져와야합니다. 예를 들어, 말하자면이 기능은 존재의 : my_package.setup_workspace :하나의 함수로 여러 개의 파이썬 모듈을 가져와 익숙한 환경을 손쉽게 설정할 수 있습니다.

def imports(): 
    import numpy as np 
그때 설정을 수 있도록하고 싶습니다

로 새로운 jupyter 노트북에 내 작업 공간 :

import my_package 
my_package.setup_workspace 
np.array(["I wish this could work!"]) 

하지만 내가 할 때를 , 파이썬은 np를 찾을 수 없다고보고합니다. 그래서 import() 함수는 numpy를 새로운 jupyter 작업 공간으로 적절히 임포트 할 수 없었습니다.

답변

1

함수에서 가져 오기를 수행 할 때 함수의 local 네임 스페이스에있는 항목을 가져 오지만 모듈 global은 가져 오지 못합니다. 변수가 전역 변수라고 선언하지 않으면 외부 변수로 이미 종료해야합니다. 이를 통해 외부 범위를 "오염"시키지 않고 함수 전체에서 변수 이름을 재사용 할 수 있습니다.

먼저 자기 방식으로 자신의 마법을 정의하기 위해, this 트위터 스레드 및 this 솔루션을 참조 포함 :

당신은 앞으로의 몇 가지 방법이있다. 그런 다음 노트북에서 %imports을 수행하여 현재 셀을 많은 수의 가져 오기로 바꿀 수 있습니다. Advantage는 옵션을 전달할 수 있지만 IPython에서만 작동합니다.

둘째, 기능을 제거하고 최상위 수준 인 my_package.py에서 모든 설정을 수행 한 다음 from my_package import *을 수행하십시오. import *은 파이썬 세계에서 눈살을 찌푸리게합니다. 그러나 그것은 단지 당신을위한 것이라면, 당신은 안전해야합니다.

IPython에서 %run -i이 할 수있는 일을 살펴보십시오. 현재 익명의 외부 스크립트를 실행할 수 있기 때문에 hackish이지만 작동해야합니다.

파이썬이 어떻게 작동하는지 깊이 조사하고 싶다면 조사 할 수있는 몇 가지 다른 방법이 있습니다. 예를 들어 실제로 수동으로 setup_workspace__code__ 개체를 추출 할 수 있습니다. 수정하고 로컬 범위를 만들지 않기 위해 다시 실행하십시오. 그러나 that's은 아마도 당신이 찾고자하는 것이 아닙니다. 그래도 가능하지만 Python 버전에서 이식 가능하지 않을 수 있습니다.

+0

도움이됩니다. 나는 약간의 표준 옵션이 없다는 사실에 놀랐지만 디자이너가 네임 스페이스에 대해 명시 적으로 표현하고 다른 가져온 파일이 글로벌 네임 스페이스를 오염시키지 않는 것이 좋을 것이라고 생각했기 때문에 그럴 것이라고 생각한다. 나는 import * 메소드를 사용할 것이라고 생각한다. 그렇게하면 my_package.py에서 사용자 지정 설치 코드를 실행하여 내 작업 영역 (numpy 및 pandas 사용자 지정 옵션 설정)을 추가로 설정하고 사용자가 올바른 가상 환경에서 실행되는지 확인할 수 있습니다. 감사! –

관련 문제