我有一个python
应用程序,它具有固定的布局,我无法更改。我想用setuptools包装它,例如写一个setup.py
脚本。
使用官方文档,我能够编写第一个模板。但是,有问题的应用程序使用了许多未明确包含任何包的其他数据文件。这是一个示例源树:
somepackage
__init__.py
something.py
data.txt
additionalstuff
moredata.txt
INFO.txt
麻烦:something.py
中的代码会读取文件moredata.txt
和INFO.txt
。对于前者,我可以通过添加一个空的additionalstuff/__init__.py
文件来对问题进行修补,以便将additionalstuff
提升为一个包,然后由setuptools
获取。但是我怎么可能将INFO.txt
添加到我的.egg
?
建议的解决方案使用了
的内容package_data = { '' : ['moredata.txt','INFO.txt']}
对我不起作用,因为文件moredata
和INFO.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
答案 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',
]