2012-04-06 2 views
4

일부 폴더에서 모든 모듈을 가져 오도록 Python에 알려주는 가장 좋은 (가장 깨끗한) 방법은 무엇입니까?Python : 폴더에서 모든 모듈을 가져 옵니까?

사람들이 "시작"할 때 내 코드가 내 시작시마다 확인하고 거기에있는 모듈을 가져와야하는 내 응용 프로그램의 폴더에 "모듈"(모듈)을 넣을 수있게하려고합니다.

또한

+0

가능한 중복 (http://stackoverflow.com/questions/1057431/loading-all-modules-in-a-folder-in-python) –

+0

유사한 스레드 및 해당 답변을 확인하십시오. http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder – vaisakh

답변

5

을 TS 당신은, 당신은 "os.listdir"또는 "glob.glob"와 폴더 내용 반복하고 __import__ 내장 함수와 "평"로 끝나는 각 파일을 가져올 수 있습니다

import os 
for name in os.listdir("plugins"): 
    if name.endswith(".py"): 
      #strip the extension 
     module = name[:-3] 
     # set the module name in the current global name space: 
     globals()[module] = __import__(os.path.join("plugins", name) 

이 접근법의 장점은 : 모듈 이름을 __import__으로 동적으로 전달할 수 있습니다. --mport 문은 모듈 이름을 하드 코드해야하며, 파일에 대한 다른 것들을 확인할 수 있습니다. 필수 모듈을 가져 오기 전에

+0

이것은 여전히 ​​Python3.6에서 작동하지만 마지막 줄은 다음과 같이 변경됩니다 : 'import importlib; importlib.import_module ("plugins"+ "."+ module)' –

+0

고마워 - 그들은'__import__'에서 파일 이름의 사용을 중단했습니다. 기능은 여전히 ​​효과가 있지만, 단지 "."을 사용해야합니다. 'os.path.join' 대신에 – jsbueno

1

은 내부

__init__.py 

라는 이름의 파일을 만듭니다 ("무언가를"하지 "myfolder.mymodule.something"하지만) 추가 범위가 가져온 물건에 추가하지 않으려는 폴더와 같은 폴더 이름을 가져올하십시오 __init__.py 파일의 사용을 통해, 모듈에 폴더 자체를 변형하고 from <foldername> import * 수이을 사용하는 경우

>>> from <folder_name> import * #Try to avoid importing everything when you can 
>>> from <folder_name> import module1,module2,module3 #And so on 
+0

더 많은 정보로 내 게시물을 편집했습니다. –

+0

그럼 대답 링크에서 제안 된대로 os.path 목록에 폴더를 추가하고 필요한 것을 가져옵니다. – luke14free

0

당신은 그 프로젝트를 시도 할 수 있습니다 :이 모듈로 https://gitlab.com/aurelien-lourot/importdir

을, 당신은 단지 당신의 디렉토리에서 모든 플러그인을 가져올 수있는 두 줄을 작성해야하고 추가 __init__.py (또는 추가 다른 기타 필요하지 않습니다 파일) : [파이썬에서 폴더에있는 모든 모듈을로드]의

import importdir 
importdir.do("plugins/", globals()) 
+0

이 리눅스 경로에서만 작동합니까? – Sajuuk

관련 문제