如何在Python sdist中分发未被VCS跟踪的文件?
我想找到一种合适的方法,将git没有跟踪的文件包含在PythonSDist中 上下文 我的项目中的如何在Python sdist中分发未被VCS跟踪的文件?,python,git,python-3.x,sdist,Python,Git,Python 3.x,Sdist,我想找到一种合适的方法,将git没有跟踪的文件包含在PythonSDist中 上下文 我的项目中的.mo文件不会被git跟踪(就像安装时需要创建的一些其他.txt文件一样) 我在setup.py中编写了一个小函数,用于在安装时创建它们,我在setup()中调用它们: 请注意,它们应该属于数据目录,因为: “数据文件”选项可用于指定所需的其他文件 通过模块分发:配置文件,消息目录, 数据文件,任何不符合前面类别的内容 因此,这在python3 setup.py安装(以及bdist中也能很好地工作。
.mo
文件不会被git
跟踪(就像安装时需要创建的一些其他.txt
文件一样)
我在setup.py
中编写了一个小函数,用于在安装时创建它们,我在setup()
中调用它们:
请注意,它们应该属于数据目录
,因为:
“数据文件”选项可用于指定所需的其他文件
通过模块分发:配置文件,消息目录,
数据文件,任何不符合前面类别的内容
因此,这在python3 setup.py安装
(以及bdist
中也能很好地工作。.mo
文件生成并存储在正确的位置
但是如果我想让它与sdist
一起工作,那么我必须将它们包含在清单中。在中(例如递归包含mathmaker*.mo
):
在版本3.1中更改:所有与数据文件匹配的文件都将添加到清单文件中
如果未提供模板。看
(链接没有多大帮助)
我不愿意将*.mo
文件包含在清单.in
中,因为git没有跟踪它们。而且不喜欢这种情况,它抱怨版本控制和sdist中的文件列表不匹配代码>
那么,有没有办法解决这个丑陋的局面
重现这种情况的步骤
环境与项目
为避免污染您的环境,请在您选择的目录中创建并激活专用虚拟环境(python3.4+):
pyvenv-3.4 v0
$source v0/箱/激活
(v0)$
在project0
目录中复制以下树:
。
├── .gitignore
├── 舱单
├── 自述文件
├── setup.py
└── 项目0
├── __初始值
├── main.py
└── 数据
└── dummy_versioned.po
其中,自述文件.rst
,初始化文件.py
和虚拟版本.po
为空
其他文件的内容:
.gitignore
:
构建/
距离/
*.鸡蛋信息
project0/data/*.txt
*~
清单。在
中:
recursive include project0*.po
递归包含project0*.txt
main.py
:
#/usr/bin/env蟒蛇3
#-*-编码:utf-8-*-
def入口_点():
将open('project0/data/a_file.txt',mode='rt')作为f:
打印(f.read())
setup.py
:
#/usr/bin/env蟒蛇3
#-*-编码:utf-8-*-
导入平台
从setuptools导入设置中,查找\u包
def create_文件():
txt_file_path='project0/data/a_file.txt'
打开时(txt文件路径,模式='w+')为f:
f、 写入(“一些虚拟平台信息:+platform.platform())
返回[('project0/data',[txt文件路径]]
设置(
name='project0',
version='0.0.1',
作者='J.Doe',
作者j。doe@someprovider.com',
url='1〕http://myproject.url',
packages=find_packages(),
数据文件=创建文件(),
include_package_data=True,
入境点={
'console_scripts':['myscript0=project0.main:entry_point'],
}
)
启动本地git
repo:
(v0)$git init
(v0)$git添加。
安装检查清单
:
(v0)$pip3安装检查清单
安装和测试
安装
工作:
(v0)$python3 setup.py安装
.
.
.
正在复制project0/data/a_file.txt->build/lib/project0/data
.
.
.
已完成处理project0==0.0.1的依赖项
(v0)$myscript0
一些虚拟平台信息:Linux-3.16.0-29-generic-x86_64-with-Ubuntu-14.04-trusty
如果您rm project0/data/a_file.txt
,则myscript0
不再工作,但重新安装它,它会像预期的那样再次工作
构建sdist还包括a_file.txt
:
(v0)$python3 setup.py sdist
.
.
.
硬链接project0/data/a_file.txt->project0-0.0.1/project0/data
.
.
.
请注意,要将此文件包含在sdist中,似乎有必要(如下面“上下文”部分所述)在清单.in中包含递归包含项目0*.txt
。请删除这一行,python3 setup.py sdist
将不再提及a_file.txt
(不要忘记删除任何以前的build/
或dist/
目录来观察这一点)
结论
因此,一切都按原样运行,但存在这种差异:a_file.txt
不被git
跟踪,而是包含在MANIFEST.in
中
检查清单
清楚地说明:
版本控制和sdist中的文件列表不匹配!
VCS中缺少:
project0/data/a_file.txt
那么,有没有合适的方法来处理这种情况呢?据我所知,您的问题是您想添加要与git存储库一起分发的文件,但不想跟踪它们的更改。
这可以通过以下四个简单步骤完成:
第0步:
首先,确保路径/a_file.txt
文件中的内容与要分发的内容匹配。据我所知,它不能为空,因此,如果您只是希望该文件存在,请在其中添加一个换行符/空格字符
第1步:
使用git Add path/a_file.txt将文件添加到git
第二步:
提交文件(git提交路径/a_file.txt
)
第三步:
更新git的索引并告诉git应该进一步忽略它
对文件的更改
setup(
.
.
.
data_files=create_extra_files(),
include_package_data=True,
.
.
.
)