Подтвердить что ты не робот

Где импортируется модуль?

Предполагая, что у меня есть два модуля Python, а путь path_b находится в пути импорта:

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

#file: path_a/app.py
import my_module

Можно ли увидеть, откуда импортируется модуль? Я хочу, чтобы результат вроде "Я был импортирован из path_a/app.py", если я запустил app.py(потому что мне нужно имя файла).

Edit: Для лучшего понимания; Я мог бы написать:

# 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
4b9b3361

Ответ 1

Там может быть более простой способ сделать это, но это работает:

import inspect

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

Обратите внимание, что путь будет напечатан относительно текущего рабочего каталога, если он является родительским каталогом местоположения script.

Ответ 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

Попробуйте my_module.__file__, чтобы узнать, откуда он. Если вы получаете AttributeError, это, вероятно, не файл источника Python (.py).

Ответ 4

Кроме того, если у вас есть функция/класс f из модуля m, вы можете получить путь к модулю с помощью модуля inspect

import inspect
from m import f

print inspect.getmodule(f)

Ответ 5

Если вы хотите увидеть, где хранится модуль, например, setuptools, введите shell:

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

Ответ 6

Я написал простой скрипт, поэтому у меня есть команда pywhich которая позволяет мне найти источник Python-модуля. Он не работает для некоторых встроенных программ, таких как sys, у которых нет атрибута \__file__.

Это можно запустить из командной строки Linux, чтобы определить, откуда скрипт Python, запущенный в текущей среде, получит модуль, например:

% pywhich os


#! /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

Вот как я это делаю:

print(module_name.__path__)

Ответ 8

Другие ответы в порядке, но если вы хотите рассказать об этом из импортированного модуля, выполните

print "I was imported from %s" % __file__