gpt4 book ai didi

python - 任何获取 "data_files"根目录的 python 函数?

转载 作者:太空狗 更新时间:2023-10-29 17:19:32 25 4
gpt4 key购买 nike

对于使用“setup.py”构建安装包的开发人员来说,这应该是一个非常常见的问题,之前应该被问过,但我在任何地方都找不到合适的答案。

在 setup.py 中

from distutils.core import setup
setup(
....,
....,
data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
....,
....,
)

sudo python setup.py install 结果

running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/MyApp_trainer to 755
changing mode of /usr/local/bin/MyApp_reference_updater to 755
changing mode of /usr/local/bin/MyApp_predictor to 755
changing mode of /usr/local/bin/reference_updater to 755
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info

使用上面的结果观察,“/usr/local”是“data_files”的根目录。除了硬编码,是否有任何 Python 函数可以给我这个“data_files”根目录?

最佳答案

默认情况下,当以 root 身份安装包时,data_files 列表中的相对 目录名称根据 sys.prefix 的值进行解析。 (对于纯 python 库)或 sys.exec_prefix (对于具有已编译扩展名的库),因此您可以基于它检索文件。从 distutils documentation 中引用:

If directory is a relative path, it is interpreted relative to the installation prefix (Python’s sys.prefix for pure-Python packages, sys.exec_prefix for packages that contain extension modules).

因此对于您的示例,您将在 os.path.join(sys.prefix, 'MyApp', 'CBV') 中找到您的文件。

但是,您最好使用 importlib.resources library (Python 3.7 及更高版本)加载包数据。您确实希望您的数据文件包含在包中以使其发挥最佳效果。这意味着您将使用data_files,而是在 MANIFEST.in 文件中列出文件模式并设置 include_package_data=True,或者列出文件模式在 package_data 中,参见 Including data files在 setuptools 文档中。

对于较早的 Python 版本,您可以对 pkg_resources module Resource API 执行相同的操作加载数据文件(它是 setuptools 库的一部分,正是出于这个目的)。

然后您可以使用 resource_string() 将此类资源文件直接从包中加载到字符串中,例如:

try:
from importlib.resources import read_text
except ImportError:
from pkg_resources import resource_string as read_text

foo_config = read_text(__name__, 'foo.conf')

关于python - 任何获取 "data_files"根目录的 python 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com