假设我有两个Python模块,并且path_b在导入路径中:
# file: path_b/my_module.py
print "I was imported from ???"
#file: path_a/app.py
import my_module
Run Code Online (Sandbox Code Playgroud)
是否可以查看模块的导入位置?我想要一个输出,如"我是从path_a/app.py导入的",如果我启动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__)
Run Code Online (Sandbox Code Playgroud)
所以输出将是:
$> python path_app.py
I was imported from path_a/app.py
Run Code Online (Sandbox Code Playgroud)
Joh*_*nes 81
试试这个:
>>> import my_module
>>> my_module.__file__
'/Users/myUser/.virtualenvs/foobar/lib/python2.7/site-packages/my_module/__init__.pyc'
Run Code Online (Sandbox Code Playgroud)
编辑
在这种情况下写入__init__.py您的模块的文件:
print("%s: I was imported from %s" %(__name__, __file__))
Run Code Online (Sandbox Code Playgroud)
Woo*_*ble 15
可能有一种更简单的方法可以做到这一点,但这有效:
import inspect
print inspect.getframeinfo(inspect.getouterframes(inspect.currentframe())[1][0])[0]
Run Code Online (Sandbox Code Playgroud)
请注意,如果路径是脚本位置的父目录,则将相对于当前工作目录打印路径.
Fáb*_*niz 10
此外,如果您有f模块中的函数/类,则m可以使用模块获取模块的路径inspect
import inspect
from m import f
print inspect.getmodule(f)
Run Code Online (Sandbox Code Playgroud)
我写了一个简单的脚本,所以我有一个命令pywhich
可以让我找到 Python 模块的来源。它不适用于像 sys 这样没有\__file__属性的内置函数。
这可以从 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]))
Run Code Online (Sandbox Code Playgroud)