IT story

모듈 이름에 '-'대시 또는 하이픈이있는 경우 모듈을 가져 오는 방법은 무엇입니까?

hot-time 2020. 6. 9. 07:55
반응형

모듈 이름에 '-'대시 또는 하이픈이있는 경우 모듈을 가져 오는 방법은 무엇입니까?


foo-bar.py를 가져오고 싶습니다. 이것은 작동합니다 :

foobar = __import__("foo-bar")

이것은하지 않습니다 :

from "foo-bar" import *

내 질문 : 위 형식을 사용하여 from "foo-bar" import *모듈이있는 모듈을 가져올 수있는 방법이 -있습니까?


당신은 할 수 없습니다. foo-bar식별자가 아닙니다. 파일 이름을foo_bar.py

편집 :import 목표가 아닌 경우 (에서와 같이 무슨 일이 일어나 든 상관 sys.modules없이 가져 오기 위해 필요하지 않음) 파일의 모든 전역을 자신의 범위로 가져 오는 것만으로도 사용할 수 있습니다execfile

# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>> 

Python 이름 지정 규칙과 일치하도록 모듈의 이름을 바꿀 수없는 경우 중개자 역할을 할 새 모듈을 작성하십시오.

 ---- foo_proxy.py ----
 tmp = __import__('foo-bar')
 globals().update(vars(tmp))

 ---- main.py ----
 from foo_proxy import * 

Python 3.1부터 importlib를 사용할 수 있습니다.

import importlib  
foobar = importlib.import_module("foo-bar")

( https://docs.python.org/3/library/importlib.html )


원본 파일의 이름을 바꿀 수 없으면 심볼릭 링크를 사용할 수도 있습니다.

ln -s foo-bar.py foo_bar.py

그럼 당신은 할 수 있습니다 :

from foo_bar import *

다른 사람이 파이썬 명명에서 "-"를 사용할 수 없다고 말한 것처럼 많은 해결 방법이 있습니다. 하나의 해결 방법은 경로에서 여러 모듈을 추가 해야하는 경우 유용합니다. sys.path

예를 들어 구조가 다음과 같은 경우 :

foo-bar
├── barfoo.py
└── __init__.py

import sys
sys.path.append('foo-bar')

import barfoo

참고 URL : https://stackoverflow.com/questions/8350853/how-to-import-module-when-module-name-has-a-dash-or-hyphen-in-it

반응형