4

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

  • NumPy 和 SciPy
  • matplotlib
  • PyQt
  • 开放式CV
  • 太平船务

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

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

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

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

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

4

3 回答 3

2

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

于 2012-07-27T19:03:16.920 回答
1

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

获取正确的库版本似乎很简单——使用 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.

您可以做一些事情来使您的实用程序可重用——

  • 将所有 URL 列表、最低版本号、所需库名称等放入配置文件
  • 编写一个脚本来帮助您设置安装程序
  • Py2exe 安装程序制造商脚本
  • 卖掉
  • 更好的是,在 GPL 下发布它,这样我们就可以尽情享受您的劳动成果。
于 2012-07-27T18:29:01.333 回答
0

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

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

于 2013-08-06T20:59:36.790 回答