【问题标题】:How to correctly install data files with setup.py?如何使用 setup.py 正确安装数据文件?
【发布时间】:2022-01-16 22:11:53
【问题描述】:

使用 python 3.8 我在测试库中有以下结构:

testrepo
    setup.py
    Manifest.in
    util/
        mycode.py
        data/
            mydata.txt

文件setup.py 看起来像

setup(
    name='testrepo',
    version="0.1.0",
    packages=['util'],
    author='Tester',
    description='Testing repo',
    include_package_data=True,
    package_data={
        "util.data": ["*"]
    },
)

并使用以下Manifest.in

include util/data/mycode.txt

当我安装这个包时,我在venv/lib/python3.8/site-packages/util 中看不到任何关于data 文件夹的提示(将repo 安装到python 虚拟环境中时)。

如何正确地做到这一点,这样我就可以使用文件util/data/mydata.txt读取内容

from util import data
import importlib.resources as import_resources
text = import_resources.read_text(data, "mydata.txt")

或者其他...

在哪里可以找到完整的文档以及示例等?

【问题讨论】:

    标签: python import


    【解决方案1】:

    我猜你要做的就是创建如下的 repo 基本结构:

    myrepo
        setup.py
        Manifest.in
        mypackage/
            __init__.py
            mycode.py
            data/
                __init__.py
                mydata.txt
    

    请务必记住另外 6 个步骤:

    1. 你需要将数据文件夹放在你的包文件夹中

    2. 您需要在数据文件夹中添加__init__.py

    3. setup.py 中,您必须使用packages=find_packages(), 来查找您的包裹。

    4. setup.py中,你必须设置include_package_data=True,

    5. setup.py 中,您必须指定数据文件的路径:

       package_data={
           "mypackage.data": ["*"]
       },
      
    6. 您还必须定义一个 second 文件名 Manifest.in 再次包含您的数据文件,如下所示(在此处使用占位符 - 您也可以将每个文件添加到单独的行中):

       include util/data/*
      

    如果你很幸运,那么你可以像这样包含/使用你的数据文件

    from mypackage import data
    import importlib.resources as import_resources
    text = import_resources.read_text(data, "mydata.txt")
    

    with import_resources.path(data, "mydata.txt") as filename:
        myfilename = filename
    

    获取数据文件的路径。

    不确定这是否记录在任何地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 2012-03-30
      • 2012-07-28
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2018-07-11
      相关资源
      最近更新 更多