【问题标题】:How to be able to access data files in all install and distribution cases with setuptools?如何使用 setuptools 访问所有安装和分发案例中的数据文件?
【发布时间】:2018-07-12 02:35:59
【问题描述】:

我有点迷失在所有可以添加数据文件的位置。 首先,有MANIFEST.in 文件。据我了解,这只是为了指定要包含在“源代码分发”中的源文件。 然后,有setup() 函数的data_files 参数,您可以在其中列出应该安装的文件,但它来自根目录(/~user/.local)。最后,还有package_data 假装做我想做的事……但在bdist 上,我看不出与data_files 有什么区别

我有一个数据文件,比如“default_conf.cfg”。

我的MANIFEST.in 包含:

include default_conf.cfg

还有我的setup.py

setup(
  # ...
  package_data={
    '': ['default_conf.cfg'],
  }
)

当我执行./setup.py sdist 时,包含该文件,与./setup.py bdist 相同(如预期)

但是,如果我尝试安装为可编辑包 (pip install --user -e .),我无法使用 pkg_resources.resource_string(__name__, 'default_conf.cfg') 访问它

在分发/安装时能够从任何类型访问它,我缺少什么?

(文档非常冗长,信息分散在几个页面中,因此很容易遗漏一些内容。)

编辑

我把我的数据文件作为我模块的子目录,它似乎更好:

my_pkg/
|-my_pkg/
| |-__init__.py
| |-data/
| | |-default_conf.cfg
| 
|-setup.py

setup.py:

setup(
  # ...
  package_data={
    'my_module': ['data/default_conf.cfg'],
  }
)

但是,当我尝试pip install --user -e .时,.egg-link的内容是/.../my_pkg/build/lib而不是/.../my_pkg,那么当然,它不是实时可编辑的...为什么setuptools使用这个路径?

【问题讨论】:

  • 什么是pkg_resource
  • setuptools.readthedocs.io/en/latest/pkg_resources.html 访问资源的“标准方式”(通常)
  • 好吧,有一个复制粘贴错字,现在,我将调用更正为resource_string
  • 您的package_data 现在是正确的,所以它应该可以工作。首先,尝试清理:pip uninstall -y mypkg,删除项目目录中的buildmypkg.egg-info目录,然后重新运行pip install --editable .。如果这没有帮助,请检查您的项目目录中是否有不必要的 __init__.py 并将其删除。
  • “不必要的__init__.py" ? because I effectively have an empty __init__.py”是什么意思,因为我只有子模块

标签: python python-3.x setuptools packaging pkg-resources


【解决方案1】:

编辑实际上回答了这个问题。安装可编辑问题是由我的 setup.py 模板中默认存在的 py2to3 步骤引起的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2012-10-10
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多