模块从何处导入?

2024-04-29 00:59:08 发布

您现在位置: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(因为我需要文件名),我想要一个类似“我是从路径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

Tags: 模块pathfrompyimport路径appfoo
3条回答

可能有一种更简单的方法可以做到这一点,但这是可行的:

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

相关问题 更多 >