如何找到Python库的安装路径



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

现在,我想编写一个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。

如果包已经安装,您可以直接导入它们,并查看它们的__file__属性:

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

几乎找到了这个问题的解决方案。我提到了这个问题和这个问题,所以感谢那里给出的答案。

首先,您需要将所有已安装模块的列表放到一个列表中。使用此问题获取此问题的解决方案的输出。

现在您有了所有已安装python模块的列表。您需要查看列表的格式,然后对其进行适当的格式化,以将各个元素作为模块的名称。

然后,您可以将模块从它们的名称导入为字符串,如下所述。然后,正如alejandro已经说过的,mymodule.__file__包含路径。

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


我发现了一种更容易找到模块所在位置的方法。这可能是OP正在寻找的"挽歌"解决方案。

import sys
print sys.path

从Python文档关于系统模块sys.path包含

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

执行此操作的快速命令行方法如下:

% python3 -c "import sys; print(list(filter(lambda s: s.find('packages') > -1, sys.path)))"

这将列出python3的所有包文件夹。例如:

['/home/toor/.local/lib/python3.7/site-packages', '/home/toor/.pyenv/versions/3.7.9/lib/python3.7/site-packages']

如果正在查找或可执行路径:

% python3 -c "import sys; print(sys.executable)"

输出:

% /home/toor/.pyenv/versions/3.7.9/bin/python3

我不知道在Python中有什么好方法可以做到这一点(除了使用os.walk从给定的根目录中抓取目录以查找文件之外)。如果你在Python中没有更好的答案,你可以在你的操作系统上从Python执行一个命令,在你要查找的库上执行一个标准的Linux/Unix查找命令。您可以使用子流程模块来执行此操作。

我通过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内的多个目录中。

相关内容

  • 没有找到相关文章

最新更新