【问题标题】:python importing relative modulespython导入相关模块
【发布时间】:2010-11-04 04:55:43
【问题描述】:

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

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

【问题讨论】:

    标签: python python-import relative-path python-module


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-08-08
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-06
          • 2016-03-07
          相关资源
          最近更新 更多