복붙노트

[PYTHON] 파이썬 : dir의 모든 모듈에서 가져 오는 방법은 무엇입니까?

PYTHON

파이썬 : dir의 모든 모듈에서 가져 오는 방법은 무엇입니까?

당신은 구조합니다 :

main.py
my_modules/
   module1.py
   module2.py

module1.py:

class fooBar():
    ....
class pew_pew_FooBarr()
    ....
...

모듈 *의 모든 클래스를 프리픽스없이 main에 추가하려면 어떻게해야합니까? 즉, foo = my_modules.module1.fooBar ()가 아닌 foo = fooBar ()를 사용하는 것입니다.

확실한 결정은 다음과 같이 main.py를 작성하는 것입니다.

from my_modules.module1 import *
from my_modules.module2 import *
from my_modules.module3 import *
...

하지만 새로운 moduleN을 만들 때 main.py를 변경하고 싶지는 않습니다. 거기에 대한 해결책이 있습니까?

나는 이런 식으로 수업을 들여 오는 것이 좋은 생각이 아니라는 것을 알고 있습니다. 그러나 저는 여전히 그것에 대해 궁금합니다.

UPD :이 질문은이 문제와 다릅니다. 내 문제는 네임 스페이스없이 모듈을로드하는 것이므로 파이썬에서 폴더의 모든 모듈을로드하는 것입니다.

해결법

  1. ==============================

    1.my_modules 폴더에서 적절한 패키지로 만들려면 __init__.py 파일을 추가하십시오. 이 파일에서 각 모듈의 전역을 __init__.py 파일의 전역 범위에 삽입하면 모듈을 가져올 때 사용할 수 있습니다 (전역 이름을 __all__ 변수에 추가 한 후에도 가능합니다) ) :

    my_modules 폴더에서 적절한 패키지로 만들려면 __init__.py 파일을 추가하십시오. 이 파일에서 각 모듈의 전역을 __init__.py 파일의 전역 범위에 삽입하면 모듈을 가져올 때 사용할 수 있습니다 (전역 이름을 __all__ 변수에 추가 한 후에도 가능합니다) ) :

    __all__ = []
    
    import pkgutil
    import inspect
    
    for loader, name, is_pkg in pkgutil.walk_packages(__path__):
        module = loader.find_module(name).load_module(name)
    
        for name, value in inspect.getmembers(module):
            if name.startswith('__'):
                continue
    
            globals()[name] = value
            __all__.append(name)
    

    자, 대신 :

    from my_modules.class1 import Stuff
    

    할 수있는 일은 다음과 같습니다.

    from my_modules import Stuff
    

    또는 모든 것을 글로벌 범위로 가져 오려면 다음과 같이하십시오.

    from my_modules import *
    

    이 방법은 클래스가 서로 덮어 쓰는 문제가있어서 두 모듈이 Foo를 제공하면 마지막으로 가져온 모듈 만 사용할 수 있습니다.

  2. from https://stackoverflow.com/questions/16852811/python-how-to-import-from-all-modules-in-dir by cc-by-sa and MIT license