2017-02-25 3 views
0

별칭에서 import를 시도 - 나는 다음과 같은 결과를보고 놀랐습니다 scala에서 일반적입니다 : 별칭가져 오기 모듈

import numpy as np 

를 사용하여 모듈을 가져올 수있는 별칭을 만들기

을 포함한다

from np import linalg 

    ImportError: No module named np.linalg 

모듈을 가져 오는 데 유용한 다른 구문/동등한 python이 있습니까?

+1

numpy 가져 오기 직선 – Laszlowaty

+0

예제가 제대로 작동합니다. 실제로'np import linalg'를 시도했음을 의미합니까? – BrenBarn

답변

9

import module as name을 사용하면 이 아닌은 별칭을 만듭니다. 당신은 수입 체계를 오해했습니다. 메모리에

  1. 로드 모듈 및 sys.modules에 결과를 저장 :

    가져 오기 두 가지를 수행합니다. 이 작업은 번, 번만 수행됩니다. 후속 가져 오기는 이미로드 된 모듈 객체를 다시 사용합니다.

  2. 현재 네임 스페이스에 하나 이상의 이름을 바인딩합니다.

as name 구문을 사용하면 마지막 단계에서 이름을 제어 할 수 있습니다.

from module import name 구문의 경우 modulesys.modules으로 조회되므로 전체 모듈의 이름을 지정해야합니다. 당신이 정말로 이것에 대한 별칭을 가지고 싶다면, 당신은 거기에 추가 참조를 추가 할 수 있습니다 numpy을 가져 오는이 특정한 경우, 또한 numpy.linalg의 로딩 트리거 것을

import numpy # loads sys.modules['numpy'] 
import sys 

sys.modules['np'] = numpy # creates another reference 

주를, 그래서 당신이해야 할 모든입니다 :

import numpy as np 
# np.linalg now is available 

모듈 별칭이 필요하지 않습니다. 자동으로 서브 모듈을 가져 오지 않은 패키지의 경우, 당신은 사용해야 할 것 : 서브 모듈은 항상 부모 패키지에 속성으로 추가되기 때문에

import package as alias 
import package.submodule 

alias.submodule은, 어쨌든 후 사용할 수 있습니다.

+0

thx Martijn 나는'NameError : name 'numpy'is not defined'를 얻습니다. 그 스 니펫을 확인할 수 있습니까? 아아아, 내가'numpy as np'을 이미했기 때문에'sys.modules [ 'np'] = np' – javadba

+0

@javadba : 실제로'import numpy'를 실행 했습니까? –

+0

잘 작동합니다. – javadba

1

여러분이 이미 numpy를 가져 왔기 때문에 이미 linalg 부분을 가져온 것처럼 별칭을 사용하여 가져올 수 없다는 것을 이해했습니다.