복붙노트

[PYTHON] 모듈을 가져 오는 위치는 어디입니까?

PYTHON

모듈을 가져 오는 위치는 어디입니까?

두 개의 Python 모듈이 있고 path_b가 가져 오기 경로에 있다고 가정합니다.

# file: path_b/my_module.py
print "I was imported from ???"

#file: path_a/app.py
import my_module

모듈을 가져온 위치를 볼 수 있습니까? app.py를 시작하면 "path_a / app.py에서 가져온 것"과 같은 출력을 원합니다 (파일 이름이 필요하기 때문에).

편집하다: 더 나은 이해를 위해; 나는 다음과 같이 쓸 수있다.

# file: path_b/my_module.py
def foo(file):
    print "I was imported from %s" % file

#file: path_a/app.py
import my_module
my_module.foo(__file__)

출력은 다음과 같습니다.

$> python path_app.py
I was imported from path_a/app.py

해결법

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

    1.이 작업을 수행하는 더 쉬운 방법이있을 수 있지만이 작동합니다.

    이 작업을 수행하는 더 쉬운 방법이있을 수 있지만이 작동합니다.

    import inspect
    
    print inspect.getframeinfo(inspect.getouterframes(inspect.currentframe())[1][0])[0]
    

    경로가 스크립트 위치의 상위 디렉토리 인 경우 현재 작업 디렉토리를 기준으로 인쇄됩니다.

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

    2.이 시도:

    이 시도:

    >>> import my_module
    >>> my_module.__file__
    '/Users/myUser/.virtualenvs/foobar/lib/python2.7/site-packages/my_module/__init__.pyc'
    

    편집하다

    이 경우 모듈의 __init__.py 파일에 다음을 작성하십시오.

    print("%s: I was imported from %s" %(__name__, __file__))
    
  3. ==============================

    3.어디에서 왔는지 my_module .__ file__을 사용해보십시오. AttributeError를 얻으면 파이썬 소스 (.py) 파일이 아닐 것입니다.

    어디에서 왔는지 my_module .__ file__을 사용해보십시오. AttributeError를 얻으면 파이썬 소스 (.py) 파일이 아닐 것입니다.

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

    4.setuptools와 같이 모듈이 저장된 위치를보고 싶으면 쉘을 입력하십시오.

    setuptools와 같이 모듈이 저장된 위치를보고 싶으면 쉘을 입력하십시오.

    $ python -c "가져 오기 setuptools; print (setuptools .__ file__)"

  5. ==============================

    5.또한, 모듈 m의 함수 / 클래스 f를 가지고 있다면, 모듈 inspect를 사용하여 모듈의 경로를 얻을 수 있습니다

    또한, 모듈 m의 함수 / 클래스 f를 가지고 있다면, 모듈 inspect를 사용하여 모듈의 경로를 얻을 수 있습니다

    import inspect
    from m import f
    
    print inspect.getmodule(f)
    
  6. ==============================

    6.간단한 스크립트를 작성 했으므로 pywhich 명령이 있습니다. 파이썬 모듈의 출처를 찾을 수 있습니다. \ __ file__ 속성이없는 sys와 같은 일부 내장 함수에는 작동하지 않습니다.

    간단한 스크립트를 작성 했으므로 pywhich 명령이 있습니다. 파이썬 모듈의 출처를 찾을 수 있습니다. \ __ file__ 속성이없는 sys와 같은 일부 내장 함수에는 작동하지 않습니다.

    이것은 리눅스 커맨드 라인에서 실행되어 현재 환경에서 실행되는 파이썬 스크립트가 모듈을 가져 오는 곳을 찾을 수 있습니다 :

    % pywhich

    #! /usr/bin/env python
    def pywhich(module_name):
        module = __import__(module_name, globals(), locals(), [], -1)
        return module.__file__
    
    if __name__ == "__main__":
        import sys
        print(pywhich(sys.argv[1]))
    
  7. ==============================

    7.다른 대답은 괜찮습니다.하지만 가져온 모듈 내부에서 말하고 싶다면 다음과 같이하십시오.

    다른 대답은 괜찮습니다.하지만 가져온 모듈 내부에서 말하고 싶다면 다음과 같이하십시오.

    print "I was imported from %s" % __file__
    
  8. from https://stackoverflow.com/questions/7150998/where-is-module-being-imported-from by cc-by-sa and MIT license