Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python sdist中分发未被VCS跟踪的文件?_Python_Git_Python 3.x_Sdist - Fatal编程技术网

如何在Python sdist中分发未被VCS跟踪的文件?

如何在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中也能很好地工作。

我想找到一种合适的方法,将git没有跟踪的文件包含在PythonSDist中

上下文 我的项目中的
.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, . . . )