这是我认为必须解决的技术问题。在下面的用例中,也许还有其他解决方案,但是我也最关心如何解决技术问题。
我想创建一个源分发sdist
,并想在打包期间生成一个数据文件,该文件应放入分布式包中。该数据文件在版本控制下不存在,但应打包。
项目设置如下:
+ project-root
+ package-root
+ some_package
- __init__.py
- main.py
- DATA_FILE <-- doesn't exist, but shall after sdist
+ setup.py
+ MANIFEST.in
据我了解,MANIFEST.in
中的package_data
或setup.py
允许将包数据包含到源包中。 data_files
弃用的setup.py
属性允许将任何数据打包并安装到任何目标位置。但是我无法在程序包中定义位置,只能定义一个sys.path
相对或系统绝对安装位置。
我可以覆盖sdist
命令(使用cmdclass={'sdist': SdistHook}
中的setup.py
)来生成我的DATA_FILE
并将其放置到project-root/package-root/DATA_FILE
中,以便正确包装。但这会使我的工作副本变脏,我想避免。之后我可以删除该文件...但是我不认为是
我显然缺少的是一种将文件从某处(例如/tmp/DATA_FILE
)复制到目标包中某个位置的方法,例如package-root/DATA_FILE
。
如上所述,用例是创建一个详细的构建版本文件,其中包括已部署的应用程序已知的VCS信息。当应用在本地运行时,构建版本文件将不存在,并且应使用本地GIT信息。部署后,应使用已部署的版本文件。