【问题标题】:How to include paths in a Python user configuration file that is installed with setuptools (data_files)?如何在使用 setuptools (data_files) 安装的 Python 用户配置文件中包含路径?
【发布时间】:2021-09-20 15:09:57
【问题描述】:

我有一个具有以下结构的项目:

myproject/
    data/
        <some directories>
    src/
        myproject/
            <python code>
    tests/
        <some tests>
    setup.py
    config.ini
    pyproject.toml
    requirements.txt

我想在我的项目中引用 data/ 目录中的文件,而不将它们包含在源代码分发中。我认为最好的方法是使用配置文件(通过 ConfigParser,尽管我想你可以使用 YAML 或其他东西)。

Python 的 distutils/setuptools 似乎通过 setuptools.setup() 中的 data_files 选项为此提供了解决方案。按照我的理解,data_files 选项允许通过将它们复制到系统上的某个位置(即 sys.prefix)来访问包外的任意文件。这似乎是配置文件的理想选择,用户可以在安装之前对其进行编辑。

但是,由于文件被复制到某个未知位置,它会破坏 config.ini 中指定的任何相对路径。那么,你是怎么处理的呢?

我猜这可能需要配置文件中的绝对路径,但这对用户不太友好。

有没有更好的方法来访问通过包中的配置文件指定的数据文件?

【问题讨论】:

    标签: python setuptools packaging configparser


    【解决方案1】:

    您可以使用 pkg_resources:

    import pkg_resources as pk
    fiber_file=pk.resource_filename( "cytolysis" , 'example_data/fiber_points.txt')
    

    在你的 setuptools setupfile 中:

    packages=['cytolysis','cytolysis.example_data'],
    package_dir={'cytolysis': 'src', 'cytolysis.example_data': 'example_data'},
    package_data={'cytolysis': ['*.md'], 'cytolysis.example_data': ['*.txt', '*.cym']},
    

    【讨论】:

    • 难道 package_data / pkg_resources 不要求数据用 sdist 分发吗?我希望配置文件与源代码分开。
    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多