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
답변
