Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上部署Python程序并获取大型库依赖项_Python_Windows_Deployment_Opencv_Numpy - Fatal编程技术网

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

在Windows上部署Python程序并获取大型库依赖项,python,windows,deployment,opencv,numpy,Python,Windows,Deployment,Opencv,Numpy,我有一些小型Python程序,它们依赖于几个大型库,例如: 努皮和希皮 matplotlib PyQt OpenCV 皮尔 我想让Windows用户更容易安装这些程序。目前我有两个选择: 使用PyInstaller、py2exe或类似工具创建巨大的可执行捆绑包 或编写分步手动安装说明 可执行捆绑包太大了。我总是觉得有些神奇的事情发生了,下次我使用不同的库或新的库版本时,这些事情可能会发生,也可能不会发生。我也不喜欢浪费空间。手动安装太容易出错,步骤太多:下载这个特定的解释器版本,下载nu

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

  • 努皮和希皮
  • matplotlib
  • PyQt
  • OpenCV
  • 皮尔
我想让Windows用户更容易安装这些程序。目前我有两个选择:

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

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

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

AFAIK没有工具(我假设您在谷歌上搜索过),所以您必须自己制作一个

获取适当的库版本似乎很简单——使用python,您可以为每个库获取适当的安装程序。您如何知道哪个版本与用户的python兼容?您可以存储不同的下载URL列表,每个列表针对不同的python版本(这个方法是我想到的,可能有更好的方法;如果它简单且有效,这并不重要)

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


编辑 一些考虑 就在我发帖时,有几件事突然出现在我的脑海中: 首先,一些伪代码(无论如何,我将如何处理它)

#首先,我们检查模块
尝试:
进口numpy
除恐怖外:
#用于安装的标志numpy
#起泡,冲洗,重复所有依赖项
#接下来,我们检查版本兼容性——请注意,如果需要库版本
#不向后兼容,您处于DLL地狱中,我们无能为力。
#一旦有了不可用的依赖项,就可以安装它们
进口ftplib
#现在您可以安装了。对不起,我帮不了你。
您可以做一些事情来使您的实用程序可重用--

  • 将所有URL列表、最低版本号、必需的库名称等放入配置文件中
  • 编写一个脚本,帮助您设置安装程序
  • Py2exe安装程序生成器脚本
  • 卖掉它
  • 更好的是,在GPL下发布它,这样我们就可以尽情享受你们的劳动成果

npackd存在它可以通过此处完成,也可以使用distribute(python 3.x)或setuptools(python 2.x)轻松安装,可能是pip(不知道它是否与windows兼容)。但是我会选择npackd,因为PyQt和它的pip/easy_安装的不寻常设置(使用configure.py而不是setup.py不能很好地使用它们)。尽管您必须为npackd创建自己的回购协议,以用于其中一些回购协议。我忘记了python LIB的总体贡献。

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

  • 使用,它围绕Pip进行包装,并添加递归依赖解析和启发式,以便在发生冲突时选择正确的版本
  • 将所有依赖项打包为一个egg,但不包括仍可编辑的源代码:
  • 将所有依赖项打包到zip文件中,并动态直接导入模块:或
  • 使用buildout:
  • 与一起使用(而不是“重新定位”)
  • 如果您在使用PyInstaller或类似工具冻结代码时遇到的主要问题是最终得到一个大文件,那么您可以自定义该过程,以便获得多个文件,每个依赖项一个,而不是一个大的可执行文件

如果我发现有什么东西符合我的要求,我会在这里更新。

这似乎是一个可行的方法。我只是希望有人已经做了,这样我就不必编写、调试和维护它了。到目前为止,我已经发现了上述库的问题,它们需要运行自己的安装程序。OpenCV for Python需要下载并解压缩一个zip文件,然后将*.pyd文件复制到Python安装中。很高兴知道有用于windows的维护包管理器。@sastanin npackd运行外部安装程序,请检查它。如果您选择npackd,我将帮助您在默认存储库中包含先决条件:+1-许多人都有此问题。如果你能在一个单独的答案中分享你是如何做到这一点的,那就太好了。
#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.