在Jenkins上构建包含svn:externals文件的Python Wheel

0 投票
1 回答
713 浏览
提问于 2025-04-20 22:33

我正在Windows 32位上构建一个Python 2.7.6的包。

这个包的一些组件的唯一可靠来源是一个svn的“共享”。在我们公司,通常的做法是通过使用svn:externals把这个共享包含到你的项目中。

构建这个包的正常方式是:

python setup.py bdist_wheel

在我的工作站上(我用TortoiseSVN检出了代码),一切看起来都很正常,但当我在Jenkins上运行相同的过程时,bdist_wheel过程并没有包含任何通过svn:externals引入的.py文件。

经过阅读文档,我发现这是因为一个功能,它根据哪些文件被SVN跟踪来识别哪些脚本是包的一部分。看起来由于Jenkins检出文件的方式,bdist_wheel认为我在使用SVN,并假设它知道如何确定哪些文件被跟踪,但结果却是错误的。

我需要的是一种方法,让bdist_wheel命令停止尝试猜测我关心哪些文件(实际上我希望项目中的每个.py文件都被包含,不管它是怎么引入的)。

我尝试使用MANIFEST.in文件指定我需要的文件,但没有成功。

recursive-include externals *.py

在这个例子中,“externals”是我源代码树中的一个顶级目录,里面有一个init.py文件和一堆svn:external的目录。构建的whl文件中只能看到init文件。

不幸的是,这使得.py文件的行为就像数据文件一样,在日志中我可以看到:

copying build\lib\externals\security\credentials.py -> build\bdist.win32\wheel\foopackage-0.0.4.data\..\externals\security

这显然不是一个真正的解决方案!

Pip、Virtualenv和所有相关工具都更新到最新的稳定版本。

1 个回答

0

原来这个问题是因为Jenkins使用了一个非常旧的SVN标准(1.4)来管理它自己的仓库。把它切换到1.7版本就能解决这个问题。

撰写回答