python -find当前执行哪个库

时间:2016-10-26 07:03:30

标签: python

我需要在脚本中找到特定库的路径。

我尝试使用:

os.path.dirname(MODULE.__file__),

但是它给出了一个属性错误:

"type object 'MODULE' has no attribute  '__file__'."

有没有其他方法可以找到特定模块的路径?我不想使用sys.path,因为它提供了所有库的列表。

5 个答案:

答案 0 :(得分:1)

_ _中的下划线MODULE.__file__之间有空格。称之为:

>>> import os, operator
>>> os.path.dirname(operator.__file__) # where MODULE is "operator"
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4'

答案 1 :(得分:0)

如果要将传递的文件名拆分为组件而不考虑当前目录,则可以同时使用dirname()basename()。如果您还想考虑当前目录,则必须明确地这样做。

要获取绝对路径的dirname,请使用

os.path.dirname(os.path.abspath(__file__))

注意:删除 file 之前的空格。作为@paxdiablo here的响应,当模块 加载 时, __ file __ 是设置为它的名字。然后,您可以将其与其他函数一起使用,以查找该文件所在的目录。

答案 2 :(得分:0)

看起来您没有检查模块,而是检查os.path.dirname(MODULE.__module__.__file__) 对象。你可以试试:

__file__

<强>警告

通常你可以使用__file__属性来找出模块的位置,但正如docs中所述(你必须向下滚动一下或ctrl + f并搜索{{ 1}})此属性不存在。

  

静态链接到解释器的C模块不存在__file__属性;对于从共享库动态加载的扩展模块,它是共享库文件的路径名。

但您可以使用imp模块。它具有find_module功能,它将执行与实际导入模块时执行的相同搜索。这会产生如下代码:

import imp

data = imp.find_module("MODULE")
# The path of the module is the second element of the tuple
pathname = data[1]

答案 3 :(得分:0)

使用os模块

os.path.dirname(<module>.__file__)

一个例子:

>>> import os, requests
>>>
>>> requests.__file__
'/usr/lib/python2.7/site-packages/requests/__init__.pyc'
>>>
>>> os.path.dirname(requests.__file__)
'/usr/lib/python2.7/site-packages/requests'
>>>
>>> os.path.abspath(requests.__file__)
'/usr/lib/python2.7/site-packages/requests/__init__.pyc'

os.path.dirname - 只删除路径中的最后一段,即__init__.pyc - 简而言之,它会返回项目根

答案 4 :(得分:0)

其实我的代码是这样的:     from <module> import blah

我试图找到模块路径使用: os.path.dirname(module.__file__) 它给出了一个错误,说“模块”不存在。 所以我做了 :    import module然后     from <module> import blah 然后它工作!!