首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上使用内置python构建软件安装程序

在Windows上使用内置python构建软件安装程序
EN

Stack Overflow用户
提问于 2015-01-20 12:15:21
回答 2查看 365关注 0票数 2

我们的命令行实用程序是用Python编写的。

在Linux/OS上,这通常不是一个问题,因为这两者都附带了Python2.x预安装。但是,在Windows上,默认情况下不安装Python。

另外一个问题是,我们的依赖项很少需要编译,这对于Windows用户来说也不是一个简单的问题,因为它需要修改MSVC/Cygwin/等等。

到目前为止,我们通过使用Pyinstaller创建带有预安装依赖项的“冻结”Python包来解决这个问题。但是,这样做很好,但是使我们的实用程序不可扩展--例如,我们不能通过使用诸如pip之类的实用程序来添加额外的Python模块。由于我们的CLI依赖于这种能力来增加额外的可用性,这个限制成为了我们的障碍,我们想重新考虑我们的方法。

在四处搜寻时,我发现罗德克解决了这个问题是如何做到的。基本上,他们的安装程序带来了Python和其他所有东西(包括预编译的依赖项)。

这对我们来说似乎是个好主意,我在这里看到的唯一的限制是,他们的安装程序实际上是从.msi安装Python的,后者将东西放在Windows中。因此,Windows上只能安装一个X.Y版本的Python (来自.msi)

对于服务器应用程序来说,这可能是合理的,因为服务器应用程序的行为似乎是PC上唯一安装的东西,但是对于命令行实用程序来说,这是完全不能接受的。

环顾四周,我发现很少有项目声称使Python可移植-例如便携式Python。然而,我不知道它到底有多“便携”,尤其是在像这样的问题之后。

因此,问题是:

  1. 是否可以在Windows上多次安装相同的Python版本而不造成实例之间的冲突?
  2. 您会选择其他解决方法来解决这个问题吗(请不要使用“智能”解决方案,例如:丢弃Windows支持/不要使用Python)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-04 11:24:51

这是我第二个问题的答案,遗憾的是,我还没有想出一个更好的解决方案。

现在,我们改变了创建安装文件的方法:

  1. 我们将代码及其依赖项打包成一组预先构建的Python车轮。自面向Python2.7的Visual C++编译器发布以来,在Windows上创建预构建的轮子相对容易。
  2. 我们将Python安装MSI与Pip、Setuptools和Virtualenv车轮一起打包。
  3. 在安装开始之前,我们检查Python、Pip和Virtualenv是否已经安装(通过查看注册表和\Script),如果没有安装,我们将从打包的车轮安装它。Pip轮毂是通过使用getpip.py脚本安装的,我们也捆绑了这个脚本。
  4. 我们创建单独的Virtualenv并将我们的车轮安装到其中。
  5. 卸载是通过删除virtualenv文件夹完成的。Python、Pip和Virtualenv安装被抛在后面。

Inno安装程序创建的安装程序。

我仍然不完全满意这个解决方案,因为有些组件是全局安装的,并且可能与用户之前已经安装的组件(早期/新版本的python、pip、setuptools或virtualenv)发生冲突。这可能会在安装或运行时产生不可预测的错误。或者用户将来升级其中一个组件并以某种方式破坏应用程序的可能性。

此外,卸载是肮脏的,并留下了一些东西。

票数 0
EN

Stack Overflow用户

发布于 2015-01-20 22:46:48

坦率地说,我会坚持使用PyInstaller或类似的东西。这将始终为您提供正确的Python版本,无论目标计算机是否安装了Python。它还可以保护您免受以前安装的Python版本的破坏。

如果您需要添加插件,那么您应该将其构建到您的应用程序中。有几个项目可以帮助你做到这一点。以下是几个例子:

您还可以看看Django或Flask如何处理扩展。例如,您可以向SQLAlchemy添加一个扩展,以允许它与一起工作。您应该能够对自己的应用程序执行类似的操作。毕竟,pip实用程序无法处理冻结的应用程序。或者,你看过康达吗?可能对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28045168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档