【问题标题】:Python 3.x - How to get the directory where user installed packagePython 3.x - 如何获取用户安装包的目录
【发布时间】:2016-09-13 08:52:07
【问题描述】:

假设我正在构建一个包含以下文件夹树的 Python 包:

main
|-- setup.py
|-- the_package
     |--globar_vars.py
     |--the_main_script.py

当用户执行安装它时,例如:

sudo python setup.py install
python setup.py install --user
python setup.py install --prefix=/usr/local

或者好吧,使用 PIP:

pip install 'SomeProject'

我希望将安装包的文件夹保存在 global_vars.py 上,在任何变量中,例如:

globarl_vars.py
#!/usr/bin/env python3

user_installed_pkg = '/some/path/where/the/package/was/installed'

有办法得到吗?提前致谢。

【问题讨论】:

    标签: python installation packages


    【解决方案1】:

    假设您的SomeProject 包是well-formed Python package(可以使用setuptools 完成),用户可以简单地使用setuptools 包提供的pkg_resources 模块来获取此信息。例如:

    >>> from pkg_resources import working_set
    >>> from pkg_resources import Requirement
    >>> working_set.find(Requirement.parse('requests'))
    requests 2.2.1 (/usr/lib/python3/dist-packages)
    >>> working_set.find(Requirement.parse('requests')).location
    '/usr/lib/python3/dist-packages'
    

    但是,返回的路径可能是 egg 内部的东西,这意味着它不是可通过标准文件系统工具直接使用的路径。在这些情况下,您通常希望使用Resource manager API 来访问资源。

    >>> import pkg_resources
    >>> api_src = pkg_resources.resource_string('requests', 'api.py')
    >>> api_src[:25]
    b'# -*- coding: utf-8 -*-\n\n'
    

    【讨论】:

      【解决方案2】:
      import wtv_module
      print(wtv_module.__file__)
      
      import os
      print(os.path.dirname(wtv_module.__file__))
      

      【讨论】:

      • 我正在考虑这个选项。但是,这种方式仅在已安装软件包时才有效。我的意思是,你的回答只是解决了一半的问题。我得到了安装包的路径(很好),现在仍然将该路径分配给变量到 global_var.py 文件中(也已经安装)。
      • 好的,可能是拆分工作可能是解决方案;)
      猜你喜欢
      • 2022-01-23
      • 2010-09-20
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2017-09-01
      • 2019-03-12
      • 1970-01-01
      相关资源
      最近更新 更多