【发布时间】: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