模块从哪里导入?
问题描述:
假设我有两个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]
注意,路径相对于当前的工作目录,如果它的脚本位置的父目录进行打印。
答
尝试my_module.__file__
找出它的出处。如果您收到AttributeError
,则可能不是Python源文件(.py)。
答
试试这个:
>>> 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__))
答
其他答案是确定的,但如果你想从内部告知进口模块然后做
print "I was imported from %s" % __file__
答
另外,如果你从一个模块的函数/类f
m
您可以使用该模块inspect
import inspect
from m import f
print inspect.getmodule(f)
答
我已经写了一个简单的脚本,所以我有命令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]))
这就是我搜索的内容。谢谢。 – svenwltr