복붙노트

[PYTHON] Python 3.4 : 전체 경로를 사용하여 모듈을 가져 오는 방법은 무엇입니까?

PYTHON

Python 3.4 : 전체 경로를 사용하여 모듈을 가져 오는 방법은 무엇입니까?

전체 경로가 주어지면 어떻게 Python 모듈을 Python 3.4에서로드 할 수 있습니까?

비슷한 질문 전체 경로를 주어진 모듈을 가져 오는 방법? 3.4 이전의 Python 버전에 대해서는 다루지 만 결론은 제시된 답변에 대해서는 Python 3.4의 지원이 더 이상 사용되지 않으므로 Python 3.4에 대한 모든 솔루션에 감사드립니다.

이 질문은 import abitrary python 소스 파일과 중복되지 않습니다. (Python 3.3+), 이것에 대한 답은 importlib.abc.Loader.load_module ()을 떠날 때 고려해야 할 사항과 importlib에있는 문서와 함께 대답과 같이 Python 3.4에서 더 이상 사용되지 않는 loader.load_module ()을 사용하기 때문입니다.

따라서 파이썬 3.4에서 전체 경로로 모듈 가져 오기를 지원하는 솔루션이 필요합니다.

해결법

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

    1.이것은 파일 확장자에 상관없이 모든 파이썬 파일에 적용됩니다.

    이것은 파일 확장자에 상관없이 모든 파이썬 파일에 적용됩니다.

    import importlib.machinery
    
    modulename = importlib.machinery.SourceFileLoader('modulename','/Path/To/module.py').load_module()
    

    이 메소드는 imp.load_module 문서의 deprecation 메시지에서 언급되었습니다.

  2. ==============================

    2.3.6 docs에 따라 지원되거나 사용되지 않는 메소드는 다음과 같습니다.

    3.6 docs에 따라 지원되거나 사용되지 않는 메소드는 다음과 같습니다.

    def import_file(full_name, path):
        """Import a python module from a path. 3.4+ only.
    
        Does not call sys.modules[full_name] = path
        """
        from importlib import util
    
        spec = util.spec_from_file_location(full_name, path)
        mod = util.module_from_spec(spec)
    
        spec.loader.exec_module(mod)
        return mod
    
  3. ==============================

    3.이미 주어진 대답은 작동하지만 불필요하게 clunky합니다. 더 쉬운 방법 :

    이미 주어진 대답은 작동하지만 불필요하게 clunky합니다. 더 쉬운 방법 :

    import sys, os, importlib
    
    sys.path.append(os.path.dirname(filename))
    mname = os.path.splitext(os.path.basename(filename))[0]
    imported = importlib.import_module(mname)                       
    sys.path.pop()
    

    가져온 모듈은 가져온 모듈입니다. import.method (arg)를 통해 정상적으로 사용할 수 있습니다. 마지막 라인은 꼭 필요한 것은 아니지만 sys.path에 불필요한 항목을 남기지 않는 것이 더 깔끔합니다 (특히 코드를 여러 번 실행하는 경우). 이것은 3.4에서 작동하며 더 이상 사용되지 않는 것으로 표시된 것은 사용하지 않습니다.

  4. ==============================

    4.아래 함수는 Python 3.4에서 작동합니다 - 모듈에서 특정 함수를로드하고 실행하는 데 사용되지만 폴더를 sys 경로에 추가해야합니다.

    아래 함수는 Python 3.4에서 작동합니다 - 모듈에서 특정 함수를로드하고 실행하는 데 사용되지만 폴더를 sys 경로에 추가해야합니다.

    sys.path.append("path_to_your_file_to_import")
    tool = {'file':'test_tool.py', 
        'function':'sum_even_numbers', 
        'args':['list'], 
        'return':['int']
    }
    
    args = [1,2,3]
    
    def run(tool, args, silent='Y'):
            if silent == 'N':
                print('main called ' + tool['file'] + '->' + tool['function'] + ' with ', args, ' = ', tool['return'])
            mod = __import__( os.path.basename(tool['file']).split('.')[0])
            func = getattr(mod, tool['function'])
            tool['return'] = func(args)
            return tool['return']
    

    그것을 통해 전화

    run(tool, args)
    
  5. from https://stackoverflow.com/questions/27381264/python-3-4-how-to-import-a-module-given-the-full-path by cc-by-sa and MIT license