python导入相关模块

时间:2009-06-19 02:29:29

标签: python path module relative python-import

我在同一目录中有Python模块a.py和b.py. 如果a.py可能已从其他目录导入或直接执行,我如何可靠地从a.py导入b.py?该模块将被分发,因此我无法对单个路径进行硬编码。

我一直在玩__file__,sys.path和os.chdir,但感觉很乱。 __file__并非总是可用。

感谢

3 个答案:

答案 0 :(得分:6)

实际上,__file__可用于导入的模块,但前提是它是从.py / .pyc文件导入的。如果内置模块,它将不可用。例如:

>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False

答案 1 :(得分:1)

使用inspect模块将使内置模块更加明显:

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

答案 2 :(得分:-1)

将包含两者的目录放在python路径中......反之亦然。