如何在没有MANIFEST.in文件的情况下包含package_data?

发布于 2021-01-29 18:24:55

我怎么能包括package_datasdist没有MANIFEST.in文件?

我的setup.py看起来像这样:

import setuptools

setuptools.setup(
    name='foo',
    version='2015.3',
    license='commercial',
    packages=setuptools.find_packages(),

    package_data={'': ['foo/bar.txt']},
)

版本:

user@host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
>>> import setuptools
>>> setuptools.version.__version__
'3.6'

我就是无法foo/bar.txt加入。

还是此博客文章仍然正确?
http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-
documentation-on–
package_data-/

不过,在过去的一个小时中,我了解到这些陈述介于“危险误导”和“该死的谎言”之间。
这是因为Python包的主要类型是源包,而使用来创建源包的规范方法setup.py sdist。但是,package_data中指定的数据不包括在源发行版中,它们仅包括在二进制(setup.py bdist)发行版和安装(setup.py install)中。

我怎么能包括package_datasdist没有MANIFEST.in文件?

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    TL; DRpackage_data字典中的键是 ;值是glob列表。''不是任何Python软件包的有效名称。

    如果要bar.txt安装在__init__.py软件包的旁边foo,请使用

     package_data={'foo': ['bar.txt']}
    

    我有布局:

    foo/
            __init__.py
            bar.txt
    setup.py
    

    现在,如果foo是上述软件包,请执行以下操作:

    import setuptools
    
    setuptools.setup(
        name='foo',
        version='2015.3',
        license='commercial',
        packages=setuptools.find_packages(),
        package_data={'foo': ['bar.txt']},
    )
    

    之后python setup.py sdist,我检查dist/foo-2015.3.tar.gz

    % tar tfz dist/foo-2015.3.tar.gz
    ...
    foo-2015.3/foo/bar.txt
    ...
    

    但是,如果我跑你setup.pypackage_data={'': ['foo/bar.txt']},我也同意了foo/bar.txt
    不会 被添加到源代码分发, 除非这个foo-2015.3.egg- info/SOURCES.txt已经有行foo/bar.txt-在这种情况下,该文件将在源分布弹出太

    没有使用清单。setuptools版本是3.6(我故意安装了与您使用的相同的旧版本):

    >>> import setuptools
    >>> setuptools.__version__
    '3.6'
    

    上面的行为在标准中也起作用distutils2.6安装“旧版”
    distutils文档的软件包数据;带有2.7、3.1的注释:

    Changed in version [2.7, 3.1] : All the files that match package_data
    will be added to the MANIFEST file if no template is provided.



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看