【问题标题】:Getting file path of imported module [duplicate]获取导入模块的文件路径[重复]
【发布时间】:2009-04-08 11:30:21
【问题描述】:

如何获取在 python 中导入的模块的文件路径。我正在使用 Linux(如果重要的话)。

例如:如果我在我的主目录中并导入一个模块,它应该返回我的主目录的完整路径。

【问题讨论】:

    标签: python


    【解决方案1】:

    模块和包有一个__file__ 属性,其中包含其路径信息。如果模块是相对于当前工作目录导入的,您可能希望获取其绝对路径。

    import os.path
    import my_module
    
    print(os.path.abspath(my_module.__file__))
    

    【讨论】:

    • AttributeError: 模块 'tensorflow' 没有属性 'file'
    • 我认为您可以添加如何使用os.path.dirname(my_module.__file__) 获取普通文件夹名称,如下所述:stackoverflow.com/a/5003468/3734059
    【解决方案2】:

    我一直在用这个:

    import inspect
    import os
    class DummyClass: pass
    print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass))
    

    (编辑:这是一个“我在哪里”函数 - 它返回包含当前模块的目录。我不太确定这是否是你想要的)。

    【讨论】:

      【解决方案3】:

      这将为您提供模块所在的目录:

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

      【讨论】:

        【解决方案4】:

        我可能会迟到,有些模块在使用__file__ 属性查找路径时会抛出AttributeError。在这种情况下,可以使用__path__ 来获取模块的路径。

        >>> import some_module
        >>> somemodule.__path__
        ['/usr/lib64/python2.7/site-packages/somemodule']
        

        【讨论】:

          【解决方案5】:

          查找已加载模块的加载路径:

          >>> import sys
          >>> sys.modules['os']
          <module 'os' from 'c:\Python26\lib\os.pyc'>
          

          【讨论】:

          • 或者,简单地说,&gt;&gt;&gt; os。您依赖于模块的 str() 表示。
          【解决方案6】:

          我一直在用这种方法,非内置模块和内置模块都适用:

          def showModulePath(module):
                  if (hasattr(module, '__name__') is False):
                      print 'Error: ' + str(module) + ' is not a module object.'
                      return None
                  moduleName = module.__name__
                  modulePath = None
                  if imp.is_builtin(moduleName):
                      modulePath = sys.modules[moduleName];
                  else:
                      modulePath = inspect.getsourcefile(module)
                      modulePath = '<module \'' + moduleName + '\' from \'' + modulePath + 'c\'>'
                  print modulePath 
                  return modulePath
          

          例子:

          Utils.showModulePath(os)
          Utils.showModulePath(cPickle)
          

          结果:

          <module 'os' from 'C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\os.pyc'>
          <module 'cPickle' (built-in)>
          

          【讨论】:

            【解决方案7】:

            试试:

            帮助('xxx')

            例如

            >>> help(semanage)
            Help on module semanage:
            
            NAME
                semanage
            
            FILE
                /usr/lib64/python2.7/site-packages/semanage.py
            

            【讨论】:

              猜你喜欢
              • 2019-01-27
              • 1970-01-01
              • 2023-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多