我在同一目录中有 Python 模块 a.py 和 b.py。鉴于 a.py 可能已从另一个目录导入或直接执行,我如何可靠地从 a.py 导入 b.py?该模块将被分发,因此我无法对单个路径进行硬编码。
我一直在玩__file__
sys.path 和 os.chdir,但感觉很乱。而且__file__
并不总是可用。
我在同一目录中有 Python 模块 a.py 和 b.py。鉴于 a.py 可能已从另一个目录导入或直接执行,我如何可靠地从 a.py 导入 b.py?该模块将被分发,因此我无法对单个路径进行硬编码。
我一直在玩__file__
sys.path 和 os.chdir,但感觉很乱。而且__file__
并不总是可用。
实际上,__file__
可用于导入的模块,但前提是它是从 .py/.pyc 文件导入的。如果该模块是内置的,它将不可用。例如:
>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False
使用检查模块将使内置模块更加明显:
>>> import os
>>> import sys
>>> inspect.getfile(os)
'/usr/local/lib/python2.6/os.pyc'
>>> inspect.getfile(sys)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/inspect.py", line 407, in getfile
raise TypeError('arg is a built-in module')
TypeError: arg is a built-in module
将包含两者的目录放在您的 python 路径中......反之亦然。