【问题标题】:setuptools to include file in top-level directorysetuptools 将文件包含在顶级目录中
【发布时间】:2018-03-20 10:11:03
【问题描述】:

任务很简单:我有一个扩展名不是py的文件,需要随包一起分发。为了这个例子的目的,我们称之为.config.json

我尝试将它作为include .config.json 放入MANIFEST.in - 这没有效果。

我试过package_data={'': ['.config.json']} - 这也没有效果。

我也尝试了data_files=[('', '.config.json')] - 这与不相关的错误中断:error: can't copy '.': doesn't exist or not a regular file

除了自己编写构建命令之外,我找不到任何我可以做的事情来完成这项工作。而且,是的,我在 SO、GitHub 上的 bug 跟踪器等上看到了很多类似的问题。我知道 setuptoolsdistutils 基本上都被彻底破坏了,但也许有一些明智的方法可以使这项工作?我不敢相信这么简单的事情还没有解决......


根据要求,setup.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from setuptools import setup, find_packages


setup(
    name='project_name',
    version='0.1.0',
    description='Project Name in Caps',
    author='My Company',
    author_email=','.join(
        '{}@domain.com'.format(name) for name in
        list_of_names
    ),
    url='https://somewhere',
    packages=find_packages(),
    # package_data={
    #     '': ['.config.json'],
    # },
    # data_files=[('', '.config.json')],
    install_requires=[
        'pytest >= 3.4.2',
        ...
    ],
)

【问题讨论】:

  • “顶级目录”是什么意思?要将文件安装到site-packages/ 还是site-packages/mypackage/
  • @phd site-packages/package-version.egg
  • 你能发布你的setup.py吗?
  • @WillKeeling 使用 setup.py 更新。

标签: python python-3.x setuptools


【解决方案1】:

在`setup.py:

package_data={'package': ['../.config.json']}

这种方法的问题在于,egg 会将.config.json 安装到site-packages/ 中,这几乎不是您想要的,当然也不是用户对软件包的期望。

PS。 MANIFEST.in 没有帮助,因为它仅用于源分发 (python setup.py sdist)。

【讨论】:

  • “你需要把文件.config.json 放到package/” - 不,我没有。如果我这样做,它最终会出现在错误的地方(而不是site-package/package-version.egg/.config.json,它被发送到site-package/package-version.egg/package/.config.json。)
  • 好的,这确实做到了。谢谢你。但是,“鸡蛋将安装”是什么意思-egg 不是程序,而是一种格式。当我运行setup.py install 时,结果不是你描述的那样。那么,这是关于什么的呢?
  • 我想我现在可以回答我自己的问题:whlegg 格式在处理源位置的方式上是不兼容的。所以,如果我运行setup.py install,它会正确安装,但如果我运行setup.py bdist_wheel && pip install ./bdist/*.whl,我会得到不同的结果。我知道 Python 打包很垃圾,但这真的很低……
【解决方案2】:

data_files 是你想要的,但你需要确保文件名包含在一个列表中:

data_files=[('', ['.config.json'])],

当我运行您的 setup.py 时,这对我有用。

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2015-08-27
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多