setuptools:在包外添加其他文件

时间:2015-09-16 12:56:41

标签: python setuptools

我有一个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添加__init__.py文件,可以在additionpythonalstuff的情况下修复此问题,从而将其提升为包。但是,这不是一个优雅的解决方案,对于位于顶级目录中的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

2 个答案:

答案 0 :(得分:4)

还有data_files

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

考虑一下您要放置这些文件的位置。 docs

中的更多信息

答案 1 :(得分:1)

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

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