이름에 대시 또는 하이픈 (-)이있는 Python 모듈


92

이름에 대시가있는 기존 Python 모듈이 있습니다. foo-bar.py

모듈 이름을 변경하는 것은 모듈이 공유되기 때문에 피하고 싶은 것이며, 특별한 경우가 작동하도록 사용되는 모든 위치를 추적해야합니다.

이름에 일반적으로 금지 된 '-'가 포함 된 모듈을로드하는 방법이 있습니까?

(나는 이것이 모범 사례가 아니라는 것을 이해합니다. 그러나이 상황에서는 훨씬 더 큰 응용 프로그램 세트를 재 설계하고 테스트하지 않는 것을 선호합니다. 또한 회사 마스터가 시간을내어 그러한 변화.)


5
당신은 당신의 IDE에서 발견 된-파일을 모든 대체 할 수 없습니다 foo-bar와의 foobar또는 무엇을? 얼마나 힘들어요?
agf



agf 짧은 대답 : 모든 코드가 아닙니다.
Skip Huffman

S.Lott 다른 사용자는 상용 응용 프로그램입니다. 그것이 가능하다는 것을 내가 아는 방법입니다.
Skip Huffman

답변:


98

을 사용하여 할 수 있습니다 __import__(). 예를 들면 :

foobar = __import__("foo-bar")

하지만 대신 모듈의 이름을 바꿔야합니다. 이렇게하면 모듈의 파일 이름이 프로그램에서 사용되는 식별자와 다른 경우 혼동을 피할 수 있습니다.


4
감사. 나는 가능한 한 관례를 따라야한다는 것을 이해합니다. 부서별 코드 검토 중에이 특정 문제를 제기 할 것입니다.
Skip Huffman

58

나는이 질문이 이미 질문자 만족에 대한 답변을 받았음을 알고 있지만 여기에를 사용하는 것보다 약간의 장점이 있다고 생각하는 또 다른 답변이 __import__()있습니다.

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

문서에 따르면 :

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + 만


5
나는 이것을하는 방법을 찾고 있었고 귀하의 답변은 이전 답변보다 내 상황에 더 잘 적용됩니다. 이미 존재하는 답변에 대한 뚜렷한 답변이 보이면 저와 같은 위치에있는 사람들이 모든 관련 정보를 한 곳에서 찾을 수 있도록 새로운 답변으로 추가하는 것이 항상 좋습니다.
Davy M

1

하이픈 대신 밑줄을 사용해보십시오.

pymysql_utils 가져 오기

import pymysql-utils가 pip에서 사용하는 모듈의 이름 이었지만 나를 위해 일했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.