在Windows上部署Python程序并获取大型库依赖项

时间:2012-07-27 17:41:38

标签: python windows deployment opencv numpy

我有一些小的Python程序依赖于几个大型库,例如:

  • NumPy& SciPy的
  • matplotlib
  • PyQt的
  • 的OpenCV
  • PIL

我想让Windows用户更容易安装这些程序。目前我有两个选择:

  • 使用PyInstaller,py2exe或类似工具创建巨大的可执行包,
  • 或编写逐步的手动安装说明。

可执行包太大了。我总觉得有一些神奇的事情,下次我使用不同的库或新的库版本时可能会或可能不会。我也不喜欢浪费空间。手动安装太容易出错,步骤太多了:下载这个特殊的解释器版本,下载numpy,scipy,pyqt,pil二进制文件,确保它们都是为同一个python版本和同一个平台构建的,安装一个接一个,下载并解压OpenCV,将其.pyd文件复制到Python安装深层,设置环境变量和文件协会... 你看,很少有用户会有耐心和自信来做这一切

我想做的事情:只分发一个小的Python源代码,可能还有一个安装脚本,它可以获取并安装所有缺少的依赖项(正确的版本,正确的平台,安装它们)正确的顺序)。对于任何Linux软件包管理器来说,这都是一项微不足道的任务,但我不知道哪些工具可以在Windows上实现它。 是否有简单的工具可以从依赖关系 1 的URL列表中生成Windows安装程序?

1 您可能已经注意到,我列出的大多数库都不能使用pip / easy_install进行安装,但需要运行自己的安装程序并修改一些文件和环境变量。 / em>的

3 个答案:

答案 0 :(得分:2)

npackd exists http://code.google.com/p/windows-package-manager/可以通过这里完成或使用distribute(python 3.x)或setuptools(python 2.x)和easy_install,可能是pip(不知道它的Windows兼容性)。但我会选择npackd,因为PyQt和pip / easy_install的不寻常设置(不能很好地使用它们,使用configure.py而不是setup.py)。虽然您必须为npackd创建自己的repo才能用于其中一些。我忘记了使用它的python库总共贡献了什么。

答案 1 :(得分:1)

AFAIK没有工具(我假设你用Google搜索),所以你必须自己制作一个。

获取正确的库版本似乎很简单 - 使用python的ftplib,您可以为每个库获取正确的安装程序。你怎么知道哪个版本与用户的python兼容?你可以存储不同的下载URL列表,每个列表都有一个不同的python版本(这种方法脱颖而出,可能有更好的方法;如果它很简单并且有效,那就不重要了)。

在弄清楚如何运行每个安装程序后,您可以py2exe安装程序脚本,甚至用它来获取程序本身。


修改

一些注意事项

正如我发布的那样,有几件事突然出现在我脑海中: 首先,一些伪代码(无论如何我会接近它)

#first, we check modules
try:
    import numpy
except ImportError:
    #flag numpy for installation
#lather, rinse repeat for all dependencies

#next we check version compatibility -- note that if a library version you need 
#is not backwards-compatible, you're in DLL hell, and there is little we can do.
<insert version-checking code here>

#once you have your unavailable dependencies, you install them
import ftplib
<all your file-downloading here>

#now you install. sorry I can't help you here.

您可以采取一些措施使您的实用程序可重用 -

  • 将所有网址列表,最低版本号,所需的库名称等放入配置文件
  • 编写一个可帮助您设置安装程序的脚本
  • Py2exe the installer-maker-script
  • 卖它
  • 更好的是,在GPL下发布它,这样我们就可以大饱口福了。

答案 2 :(得分:0)

我有类似的需求,但另外我需要打包的应用程序才能在多个平台上运行。我目前正在探索目前可用的解决方案,这里有一些有趣的解决方案:

如果我找到满足我账单的东西,我会在这里更新。