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

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


답변