program tip

모듈은 어디에서 가져 오나요?

radiobox 2020. 12. 1. 07:52
반응형

모듈은 어디에서 가져 오나요?


두 개의 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

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

import inspect

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

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


이 시도:

>>> 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__))

my_module.__file__그것이 어디에서 왔는지 알아 보십시오 . 를 받으면 AttributeError아마도 Python 소스 (.py) 파일이 아닐 것입니다.


또한 f모듈에서 함수 / 클래스 가있는 m경우 모듈을 사용하여 모듈의 경로를 가져올 수 있습니다.inspect

import inspect
from m import f

print inspect.getmodule(f)

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

Linux 명령 줄에서 실행하여 현재 환경에서 실행되는 Python 스크립트가 모듈을 가져올 위치를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

% pywhich os


#! /usr/bin/env python
def pywhich(module_name):
    module = __import__(module_name, globals(), locals(), [], 0)
    return module.__file__

if __name__ == "__main__":
    import sys
    print(pywhich(sys.argv[1]))

예를 들어 모듈이 저장된 위치를 보려면 다음을 입력하십시오 setuptools.

$ python -c "import setuptools; print(setuptools.__file__)"


이것이 내가하는 방법입니다.

print(module_name.__path__)

다른 답변은 괜찮지 만 가져온 모듈 내부 에서 알려주려면 다음을 수행하십시오.

print "I was imported from %s" % __file__

참고 URL : https://stackoverflow.com/questions/7150998/where-is-module-being-imported-from

반응형