我需要在脚本中找到特定库的路径。
我尝试使用:
os.path.dirname(MODULE.__file__),
但是它给出了一个属性错误:
"type object 'MODULE' has no attribute '__file__'."
有没有其他方法可以找到特定模块的路径?我不想使用sys.path
,因为它提供了所有库的列表。
答案 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
然后它工作!!