setuptools:在packag外部添加其他文件

2024-06-16 10:51:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python应用程序,它有一个固定的布局,我无法更改。我想用setuptools来结束它,例如编写一个setup.py脚本。

使用官方文档,我可以编写第一个模板。但是,有问题的应用程序使用了许多附加数据文件,这些文件不是任何包的显式组成部分。下面是一个示例源树:

somepackage
   __init__.py
   something.py
   data.txt
additionalstuff
   moredata.txt
INFO.txt

这里的问题是:something.py中的代码读取文件moredata.txtINFO.txt。对于前者,我可以添加一个空的additionalstuff/__init__.py文件来升级additionalstuff到一个包并让setuptools来修复这个问题。但是我怎么可能把INFO.txt添加到我的.egg中呢?

编辑

提出的解决方案

package_data = { '' : ['moredata.txt','INFO.txt']}

对我不起作用,因为文件moredataINFO.txt不属于包,而是单独文件夹的一部分,该文件夹只是整个模块的一部分,而不是任何单个包的一部分。 如上所述,在moredata.txt的情况下,可以通过向additionpythonalstuff添加__init__.py文件来修复此问题,从而将其提升为包。但是,这不是一个优雅的解决方案,根本不适用于位于顶级目录中的INFO.txt

解决方案

根据公认的答案,下面是解决方案

这是setup.py

from setuptools import setup, find_packages

setup(
    name='mytest',
    version='1.0.0',
    description='A sample Python project',
    author='Test',
    zip_safe=False,
    author_email='test@test.com',
    keywords='test',
    packages=find_packages(),
    package_data={'': ['INFO.txt', 'moredata.txt'],
                  'somepackage':['data.txt']},
    data_files=[('.',['INFO.txt']),
                ('additionalstuff',['additionalstuff/moredata.txt'])],
    include_package_data=True,
)

这是MANIFEST.in

include INFO.txt
graft additionalstuff
include somepackage/*.txt

Tags: 文件pytestinfotxtpackagedatainit
2条回答

您需要使用package_data。把setup.py放在根目录中,然后您只需要:

package_data={'': [
    'somepackage/*.txt',
    'additionalstuff/*.txt',
    '*.txt',
]

还有data_files

data_files=[("yourdir",
             ["additionalstuff/moredata.txt", "INFO.txt"])],

想想你想把那些文件放在哪里。更多信息请参见docs

相关问题 更多 >