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

2024-05-19 14:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • NumPy和SciPy
  • matplotlib库
  • PyQt公司
  • 开放式CV
  • 皮尔

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

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

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

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

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


Tags: 文件工具用户程序版本numpymatplotlibwindows
3条回答

npackd存在http://code.google.com/p/windows-package-manager/它可以通过这里完成,也可以使用distribute(python3.x)或setuptools(python2.x)轻松安装,可能是pip(不知道它与windows兼容)。但我选择npackd是因为PyQt和pip/easy-install的不寻常设置(不能很好地使用它们,使用配置.py而不是设置.py). 不过,你必须为npackd创建自己的回购协议才能用于其中的一些交易。我忘了它对python库的贡献。在

既然没有工具(我猜你是谷歌搜索的),所以你必须自己做一个。在

使用python的ftplib获取适当的库版本似乎很简单,您可以为每个库获取适当的安装程序。你怎么知道哪个版本与用户的python兼容?您可以为不同的python版本存储不同的下载url列表(这个方法来自我的头脑,可能还有一个更好的方法;如果它简单并且有效,这并不重要)。在

在找到如何让每个安装程序运行之后,可以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下发布它,这样我们就可以尽情享用你们的劳动成果。在

我和您有类似的需求,但除此之外,我还需要打包的应用程序在多个平台上工作。我目前正在探索当前可用的解决方案,以下是一些有趣的解决方案:

我会在这里更新,如果我发现一些东西填补我的账单。在

相关问题 更多 >