我有一个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
的情况下,可以通过向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
您需要使用
package_data
。把setup.py
放在根目录中,然后您只需要:还有
data_files
想想你想把那些文件放在哪里。更多信息请参见docs。
相关问题 更多 >
编程相关推荐