如何找出Python库的安装路径?

时间:2013-07-03 16:23:12

标签: python setuptools library-path

为了安装第三方Python包,我使用了setup.py脚本,该脚本使用setuptools.setup()来安装一堆包。安装完成后,我可以在/usr/local/lib/python2.7/dist-packages下的一台机器上以及/usr/lib/python2.7/site-packages下的另一台机器上找到这些软件包。

现在我想编写一个Python脚本,找出第三方软件包的安装位置。我怎么能这样做?

1)sys.prefix = sys.exec_prefix在两台机器上都是“/ usr”。

2)python可执行文件位于两台机器上/ usr / bin / python。

3)distutils.sysconfig.get_python_lib()是一台机器上的/usr/lib/python2.7/dist-packages(“local”缺失)和/usr/lib/python2.7/site-packages上的其他机器。

4 个答案:

答案 0 :(得分:6)

如果已安装软件包,您只需导入它们,然后查看其__file__属性:

>>> import mymodule
>>> print mymodule.__file__
'/path/to/mymodule.py'

答案 1 :(得分:2)

几乎找到了解决这个问题的方法。我对this questionthis question进行了评价,所以感谢那里给出的答案。

首先,您需要将所有已安装模块的列表放入列表中。使用this question捕获solution to this question的输出。

现在您有一个已安装的所有python模块的列表。您需要查看列表的格式,然后正确格式化以获取单个元素作为模块的名称。

然后,您可以将名称中的模块作为字符串导入here。然后正如alejandro已经说mymodule.__file__包含路径。

这是一个应该有效的解决方案。不是很优雅,但我只是一个Python初学者,他在谷歌搜索方面比Python更好

<小时/> 我找到了一种更容易找到模块的方法。这可能是OP正在寻找的“优雅”解决方案。

import sys
print sys.path

关于sys module sys.path包含

的Python文档
  

指定模块搜索路径的字符串列表。从环境变量PYTHONPATH初始化,加上依赖于安装的默认值。

答案 2 :(得分:0)

我不知道在Python中执行此操作的好方法(除了从给定的根目录爬取目录以使用os.walk查找文件)。如果你没有在Python中得到任何更好的答案,你可以在你的操作系统上从python执行命令,在你正在寻找的库上执行标准的Linux / Unix查找命令。您可以使用subprocess module执行此操作。

答案 3 :(得分:0)

我通过sys.path找到了我的安装路径:

my_name = "mypackage"
def _post_install():
     def find_module_path():
         for p in sys.path:
             if os.path.isdir(p):
                 for f in os.listdir(p):
                     if f == my_name:
                         return os.path.join(p, f)
     install_path = find_module_path()
     # do something we the install_path

注意:这在setuptools注册包之后有效,如果包已安装在sys.path内的多个目录中,您可能还需要处理。