如何测试我的Python包的setup.py文件?

11

我编写了一个相当庞大的Python包,约3500个语句,并配备了强大的单元测试和验收测试套件。我对代码本身的质量感到非常自信,但是我对软件包用户的安装过程顺利进行感到不安,因为我不知道如何在适当的隔离环境中可靠地测试安装,除了通过保留一台备用计算机并为每次测试运行重新映像其操作系统安装之外。

我怀疑以正确的方式使用virtualenv可能会为测试安装提供适当的测试夹具,但经过长时间的网络搜索后未发现任何有用的指导。

如何在我的开发机器上有效地测试setup.py和其他安装部分?


4
为什么不在虚拟环境中尝试 "python setup.py install" 呢? - Saša Šijak
我怎么知道这不会使用我的开发机上存在但最终用户环境中不存在的文件或其他依赖项? - scanny
如果您觉得无法信任virtualenv是否符合您的要求,可以尝试使用虚拟机。获取VirtualBox安装并拍摄快照,然后运行setup.py并恢复快照以返回到干净状态。虚拟机还可用于许多其他事情。 :) 是的,这对此来说有些过度了,但不像单独的物理机那样过度。 - r_ahlskog
我并不介意相信virtualenv,我只是希望有人能够确定它提供了哪些级别和类型的隔离,并建立起信心,以便在特定方式下使用,或者采取某些选项或预防措施,它将提供可靠的安装测试工具。我已经使用virtualenv进行了安装,并使用tox(它使用virtualenv)来针对各种Python版本进行测试。我不知道的是,我可以信任成功的安装是否能够捕捉到其他人可能面临的安装问题。 - scanny
3个回答

5
如果你喜欢工具(我确实喜欢),可以看看fabric以及我在所有项目中编写的一组Fabric任务:

例如:circuits' fabfile

这对于任何Python项目都应该有效,并利用以下内容:

  • Sphinx
  • py.test/tox
  • virtualenv

一些基本的工作流程:

fab build    # build the package in non-development mode
fab develop  # build the package in development mode
fab docs     # build/regenerate the documentation
fab test     # run tie unit test suite
fab release  # run through a tested release cycle

类型: 输入fab -l查看命令列表,输入fab help:<name>获取任何命令的帮助信息。

更新: 最近我们添加了fab docker命令以便与Docker一起使用。

fab docker:build    # Build a Docker image
fab docker:publish  # Publish Docker image to the Docker Hub
fab docker:run      # Run a new Docker container

嗯,这看起来很有趣。所以你在某个地方保持一个单独的机器运行,作为部署测试装置?这实际上让我想到了连续集成(CI)环境作为可能的选项。也许我应该考虑将包放在Travis CI或其他类似平台上。我之前曾经简要考虑过这个问题,但没有真正进行研究。 - scanny
不,Fabric 任务都是本地的。但是我会将所有项目推送到 drono.io 和 shiningpanda.com CI 服务上 -- 但这是由 BitBucket 的存储库钩子自动处理的。 - James Mills
哦,那确实很有趣。那么你在本地机器上实际的构建在哪里进行呢?你如何获取隔离,并且它是否增强了你对构建脚本/setup.py 的信心?我想我的另一个问题是为什么你需要使用 Fabric 而不是仅使用 Bash 脚本(如果没有 SSH 连接),或者是否有 SSH 连接? - scanny
最好你研究一下我的代码 :) 我使用 Fabric,因为 a) 我不喜欢 Bash,b) Python + Fabric 更加灵活。是的,“fab test”和“fab release”都是在虚拟环境中独立完成的。 - James Mills
基本上是这样的。如果你扩展我的想法来做类似以下的事情,它会检测到缺失的C库:1)在虚拟化平台上创建一个新的OpenVZ/KVM实例;2)启动一个新的VirtualEnv;3)进行安装/设置等操作... - James Mills
显示剩余2条评论

3
如果您真的想要隔离环境,而不仅仅是在虚拟环境中执行“python setup.py install”,那么请使用VirtualBox并在其中安装一些免费的Linux操作系统。在安装完成后对该机器进行快照,以便您可以随时通过单击一个按钮恢复到起始点,并在其中尝试“python setup.py install”。

0

我认为基本的tox配置会自动完成这项工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接