我们的命令行实用程序是用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。然而,我不知道它到底有多“便携”,尤其是在像这样的问题之后。
因此,问题是:
谢谢!
发布于 2015-06-04 11:24:51
这是我第二个问题的答案,遗憾的是,我还没有想出一个更好的解决方案。
现在,我们改变了创建安装文件的方法:
Inno安装程序创建的安装程序。
我仍然不完全满意这个解决方案,因为有些组件是全局安装的,并且可能与用户之前已经安装的组件(早期/新版本的python、pip、setuptools或virtualenv)发生冲突。这可能会在安装或运行时产生不可预测的错误。或者用户将来升级其中一个组件并以某种方式破坏应用程序的可能性。
此外,卸载是肮脏的,并留下了一些东西。
发布于 2015-01-20 22:46:48
坦率地说,我会坚持使用PyInstaller或类似的东西。这将始终为您提供正确的Python版本,无论目标计算机是否安装了Python。它还可以保护您免受以前安装的Python版本的破坏。
如果您需要添加插件,那么您应该将其构建到您的应用程序中。有几个项目可以帮助你做到这一点。以下是几个例子:
您还可以看看Django或Flask如何处理扩展。例如,您可以向SQLAlchemy添加一个扩展,以允许它与一起工作。您应该能够对自己的应用程序执行类似的操作。毕竟,pip实用程序无法处理冻结的应用程序。或者,你看过康达吗?可能对你有帮助。
https://stackoverflow.com/questions/28045168
复制相似问题