【问题标题】:Finding a module's directory查找模块的目录
【发布时间】:2010-03-10 13:35:15
【问题描述】:

如何找到模块从哪个目录导入,因为它需要加载同一目录中的数据文件。

编辑:

结合几个答案:

module_path = os.path.dirname(imp.find_module(self.__module__)[1])

得到我想要的

【问题讨论】:

    标签: python module dirname


    【解决方案1】:

    如果您想通过将module_name 指定为字符串 来指定模块目录,即没有实际导入模块然后使用

    def get_dir(module_name):
        import os,imp
        (file, pathname, description) = imp.find_module(module_name)
        return os.path.dirname(pathname)
    
    print get_dir('os')
    

    输出:

    C:\Python26\lib
    


    foo.py
    def foo():
        print 'foo'
    

    bar.py

    import foo
    import os
    print os.path.dirname(foo.__file__)
    foo.foo()
    

    输出:

    C:\Documents and Settings\xxx\My Documents
    foo
    

    【讨论】:

      【解决方案2】:

      这可行:

      yourmodule.__file__
      

      如果你想找到导入对象的模块:

      myobject.__module__
      

      【讨论】:

        【解决方案3】:

        模块文件的路径在module.__file__。您可以将其与os.path.dirname 一起使用来获取目录。

        【讨论】:

        • 这似乎在模块中不起作用,例如,在 init 方法中, print self.__file__ 失败,还有其他想法吗?
        • self 不是模块,它是类的实例。模块是文件的名称,即导入中使用的名称
        【解决方案4】:

        以re模块为例:

        >>> import re
        >>> path = re.__file__
        >>> print path
        C:\python26\lib\re.pyc
        >>> import os.path
        >>> print os.path.dirname(os.path.abspath(path))
        C:\python26\lib
        

        请注意,如果模块位于您当前的工作目录(“CWD”)中,您将只获得一个相对路径,例如foo.py。我养成了立即获取绝对路径的习惯,以防在使用模块路径之前更改 CWD。​​p>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-06
          • 2015-12-03
          • 2012-12-27
          • 1970-01-01
          • 1970-01-01
          • 2011-06-09
          • 1970-01-01
          • 2021-10-05
          相关资源
          最近更新 更多