如何确定Python中使用"import"语句导入的是哪个文件?
我希望确定我正在加载本地修改过的.py文件的正确版本。就像在POSIX环境中使用"which"一样。
使用-v
参数启动Python以启用调试输出。当您导入模块时,Python会打印出模块的导入位置:
$ python -v
...
>>> import re
# /usr/lib/python2.6/re.pyc matches /usr/lib/python2.6/re.py
import re # precompiled from /usr/lib/python2.6/re.pyc
...
如果你想查看Python还在哪些地方搜索了该模块,可以再加一个-v
参数:
$ python -v -v
...
>>> import re
# trying re.so
# trying remodule.so
# trying re.py
# trying re.pyc
# trying /usr/lib/python2.6/re.so
# trying /usr/lib/python2.6/remodule.so
# trying /usr/lib/python2.6/re.py
# /usr/lib/python2.6/re.pyc matches /usr/lib/python2.6/re.py
import re # precompiled from /usr/lib/python2.6/re.pyc
...
查看它的__file__
属性。
我想通了。导入的模块有一个__file__
字段,它是加载的文件。结合使用__import__
,我定义了一个函数:
which = lambda str : __import__(str).__file__
。
def which(str): return __import__(str).__file__
。 - Roger Pate__version__ = "Some.version.String"
无论如何,每次编写模块时都要加入这些内容。
import someModule
print someModule.__version__
这是(a)明确的,(b)易于管理。您还可以使用版本控制工具中的“关键字替换”来在每次提交时实际填充版本字符串。