从PEP518环境(pyproject.toml)中的另一个包访问非Python文件

2024-09-30 12:16:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python包中(包括我的例子,这些是C++头文件),在安装其他包时使用,这些包使用它作为依赖项(从这里^ {CD2>})。p>

为了使mypackage在源发行版中包含这些文件并使相同的文件可安装,我执行了以下操作:

  • 包括MANIFEST.in包文件中的文件:
graft <folder_with_files>
  • 包括data_files下的setup.py文件中的文件
setup(
    name = 'mypackage',
    packages = ['mypackage'],
    ...
    data_files = ["folder_path", ("the", "files")]
)

到目前为止,将它们放在两个位置可以使mypackage正确安装,同时使用distutilssetuptoolspip(本地和来自PyPI)时包含的非Python文件。使用setuptoolspip时,我可以在sys.prefix中的folder_path下找到非Python文件-例如:

import sys, os
os.path.join(sys.prefix, "folder_path")

当使用distutils时,它们与python文件位于同一文件夹下,因此可以通过mypackage.__file__找到它们

import re, mypackage
re.sub(r"__init__\.py$", "", mypackage.__file__) + "folder_path"

但问题是:当另一个将其用作依赖项的包通过PEP518使用pyproject.toml文件指定了此依赖项时,从PyPI下载mypackage,并安装在PEP518生成的临时环境中,但非Python文件不在sys.prefix下,它们安装在一些随机命名的临时文件夹下,如下所示:

$TEMP_FOLDER/pip-build-env-otci9gxx/overlay/folder_path

因此,试图在sys.prefixmypackage.__file__的根目录下查找文件的脚本不会选择这些文件

如何从other_packagesetup.py以编程和确定的方式获取这些文件在PEP518环境中的安装路径


Tags: pip文件pathpydataprefixsyssetup
1条回答
网友
1楼 · 发布于 2024-09-30 12:16:43

是否确实要使用data_files

我建议改用package_data。这样,文件是Python本身的一部分(例如安装在site-packages中),一旦安装,就很容易检索

资源

使用以下任一选项访问已安装的软件包数据

1.^{}

import pkgutil
pkgutil.get_data('my_top_level_package.my_sub_package', 'file.bin')

2.^{}

importlib.resources.read_binary('my_top_level_package.my_sub_package', 'file.bin')

3.^{}

相关问题 更多 >

    热门问题