【问题标题】:How to exclude git-untracked files with setup.py sdist如何使用 setup.py sdist 排除 git 未跟踪的文件
【发布时间】:2019-06-21 16:26:23
【问题描述】:

我正在尝试发布一个由 git 跟踪的包,我认为 setuptools 会帮助我解决这个问题。但是如果我运行

python3 sdist

我可以看到它还将未跟踪的文件(我没有添加到 git 的文件)从包复制到存档(这是我用于测试但包本身不需要的临时脚本)。我是否可以忽略它们,因为我不想总是在打包前删除它们?

我在setup() 中使用packages=find_packages(),除了打包太多文件之外,一切似乎都运行良好。

一个小时的谷歌搜索确实发现很多人试图排除某些文件夹/包..这不是我想要的。 而且我不想手动指定这些文件。 我只想说“请只打包 git 版本的文件,谢谢”。

感谢您的帮助!

干杯, 约书亚

编辑:更改标题以明确说明,我没想到这是默认行为。

【问题讨论】:

  • 据我所知,Python 的打包机制与 Git 毫无关系,因此与 Git 跟踪哪些文件和不跟踪哪些文件无关。 Git 就是为什么一些文件在“git clone”之后存在的原因,以及为什么当你执行“git pull”时它们会改变。其余的取决于包装系统本身。
  • IMO,这样依赖Git是错误的做法。您的项目结构和文本描述应该确定您的包中存在什么,而不是这些文件中的哪些是原始源文件,哪些不是。通常,“git 中的文件”!=“我的包中的文件”。包中的文件可能是从源代码生成的,而不是源文件本身。您可能希望将您不想要的文件签入 git,例如包含有关您项目的个人注释的私人 README。这两个文件列表通常是不相关的,IMO 应该保持这种关系。
  • git stash --include-untracked && python setup.py sdist && git stash pop
  • @Steve 谢谢你的意见,我明白 git 和包装是两个不同的东西,我只是预计这个“问题”会更频繁地出现,并且对没有解决方案感到震惊。同样正确的是,git中可能有不应该在包中的文件......但我认为这些可以很容易地排除,例如通过 MANIFEST.in 。
  • @hoefling 非常感谢!这很有帮助。但出于安全原因,我现在将采用另一种方式:我将从 repo 的新(干净)克隆打包。我本来希望避免它,但正如史蒂夫指出的那样,我的方法可能首先受到错误哲学的支配。

标签: python setuptools python-packaging


【解决方案1】:

setuptools 是一个 python 包。 git 是一个完全独立的版本控制软件包。两人甚至不认识对方。不过……

PyPi 中有一个setuptools-git 包可以帮助你做你想做的事:

【讨论】:

  • 不错的发现。这可以很好地解决 OPs 问题。
  • 恐怕没有。我之前尝试过setuptools-git,它似乎并没有什么不同(可能已经过时了,因为它不再维护了?)
  • 迟到了,但是 - 我多年来一直在使用 setuptools-git,它对我来说总是很好,并且完全符合 OP 的要求。我不知道为什么他尝试它时它不起作用,但它确实对我有用,它包括 git 在发行版中跟踪的内容,并排除了没有的内容。
猜你喜欢
  • 1970-01-01
  • 2017-10-20
  • 2018-07-21
  • 2014-12-20
  • 2017-08-04
  • 1970-01-01
  • 2018-12-20
  • 2014-02-12
  • 2016-02-27
相关资源
最近更新 更多