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

Python 如何测试软件包的setup.py?,python,integration-testing,setup.py,Python,Integration Testing,Setup.py,我编写了一个相当大的Python包,大约3500条语句,带有一个健壮的单元和验收测试套件。我对代码本身的质量很有信心,但我对软件包用户的安装过程是否顺利感到不安,因为我不知道如何在适当隔离的环境中可靠地测试安装,缺少一些东西,比如保留一台备用机器,并为每次测试运行重新安装操作系统 我怀疑以正确的方式使用virtualenv可能会为测试安装提供一个合适的测试夹具,但在扩展web搜索之后,没有发现任何有用的指导 如何在我的开发机器上有效地测试setup.py和其他安装位?如果您喜欢工具(我喜欢),请

我编写了一个相当大的Python包,大约3500条语句,带有一个健壮的单元和验收测试套件。我对代码本身的质量很有信心,但我对软件包用户的安装过程是否顺利感到不安,因为我不知道如何在适当隔离的环境中可靠地测试安装,缺少一些东西,比如保留一台备用机器,并为每次测试运行重新安装操作系统

我怀疑以正确的方式使用virtualenv可能会为测试安装提供一个合适的测试夹具,但在扩展web搜索之后,没有发现任何有用的指导

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

如果您喜欢工具(我喜欢),请查看我在所有项目中编写的结构任务集:

e、 g:

这应该适用于任何Python项目,并利用:

  • 斯芬克斯
  • py.test/tox
  • 虚拟的
一些基本工作流:

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帮助:
获取任何命令的帮助

更新:最近我们添加了
fab docker
命令


如果你真的想要隔离而不是在virtualenv中安装python setup.py。然后使用virtualbox并在其中安装一些免费的linux操作系统。在安装后拍摄机器的快照,以便您可以随时轻松地通过单击恢复到起始点,然后尝试在那里安装
python setup.py

为什么不尝试在virtualenv中安装
python setup.py
?我怎么知道这没有利用我的开发机器上存在的文件或其他依赖项,而这些文件或依赖项不在最终用户的环境中?如果你觉得不能相信virtualenv会做你想要的事情,你可以尝试虚拟机。抓取VirtualBox安装并拍摄快照,然后可以运行setup.py并还原快照以恢复到干净状态。虚拟机在很多其他方面也很有用。:)是的,这有点过分了,但没有单独的物理机器那么过分。我不介意相信virtualenv,我只是希望有人已经弄清楚它到底提供了什么级别和类型的隔离,并且已经建立了信心,以特定的方式使用,可能有某些选择或预防措施,它将提供一个可靠的安装测试夹具。我已经用virtualenv完成了安装,并使用tox(使用virtualenv)对各种Python版本进行了测试。我不知道的是,我能在多大程度上相信那里的成功安装能够抓住其他人可能面临的安装问题。嗯,这看起来很有趣。所以你让一台单独的机器在某处运行,作为部署测试夹具?这实际上让人想到,持续集成(CI)环境是一种可能的选择。也许我应该考虑把包裹放在特拉维斯CI或别的什么东西上。我在一段时间前曾简要考虑过这一点,但没有真正研究过。不,结构任务都是本地的。然而,我确实将我的所有项目都推送到drono.io和shiningpanda.com CI服务上——但这是由BitBucket.Hmm的存储库挂钩自动处理的,这很有趣。那么在你的本地机器上,你实际上是在哪里建造的呢?如何获得隔离,以及它是否增加了您对构建脚本/setup.py的信心?我想我的另一个问题是,如果没有SSH连接,为什么需要使用fabric而不是bash脚本?或者有吗?你最好研究一下我的代码:)我使用Fabric是因为a)我不喜欢Bash,b)Python+Frabric更灵活一些。是的,“fab测试”和“fab发布”是使用virtualenv单独完成的。好吧,但至少在概念上,您是说您使用shell脚本(恰好是Python+Fabric)来完成,并将其放入开发框上单独目录中的virtualenv中。k、 这给了我一些想法。我想如果我在我的dev目录中构建这个包,然后从这个包安装到一个独立的virtualenv中,这是一个相当不错的测试。总比没有好:)它不会检测到像C库依赖性这样的东西,但它似乎已经完成了一半,除了设置一组可刷新的不同操作系统环境:)
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