【问题标题】:Python embeddable zipPython 可嵌入 zip
【发布时间】:2016-10-04 15:38:33
【问题描述】:

在 3.5.0 版本中,Python.org 引入了一个标榜为可嵌入 zip 文件的发行版。

不幸的是,压缩文件没有帮助文件(甚至没有自述文件)。 Python.org 上的download page 只是将它列在下载中。

显然这是一个可移植的 Python 发行版。无论如何,它在结构和大小上与使用安装程序的标准分发完全不同。

我意识到可以使用get-pip.py 安装 pip,并且由于 pip,添加许多其他应用程序包很容易,尽管我仍然无法添加 Tkinter(根据您的 shell 调整斜杠):

curl https://www.python.org/ftp/python/3.x.x/python-3.x.x-embed-amd64.zip > epython.zip
unzip -o epython.zip -d env1
curl -L https://bootstrap.pypa.io/get-pip.py>env1/get-pip.py
env1/python env1/get-pip.py

添加你需要的,例如django:

env1/python -m pip install django  

考虑到尺寸(3.5.1-x64 为 6.5 Mega),我认为它可以很方便地创建隔离环境。

其实一般的Pythondocumentation是这么说的

嵌入式发行版(几乎)与用户系统完全隔离,包括环境变量、系统注册表设置和安装包

鉴于此,在 Windows 中现在有两个独立的 Python 环境,第二个是标准的 Virtualenv。 Virtualenv中同样的流程如下:

virtualenv env2

对于 django 来说是:

env2/Scripts/python -m pip install django  

比较env1env2 的内容,它们似乎具有相同的文件。唯一显着的区别是Tkinter1,无论如何这对于桌面应用程序来说意义不大。

Python Virtualenv 和 Python embeddable 有什么区别?

具体来说,使用可嵌入 zip (env1) 和 Virtualenv (env2) 创建的隔离 Web 应用程序之间的区别是什么?

【问题讨论】:

  • 如上所述,可嵌入的 Python 中没有 Tkinter。如果你知道怎么做,请回答here

标签: python python-3.x pip


【解决方案1】:

documentation 中可以看出,它主要用于在 ms-windows 上运行基于 Python 的应用程序,并将 Python 嵌入到应用程序中。如您所见,他们遗漏了tkinter。也许是为了缩小尺寸?

我认为将它与 virtualenv 进行比较没有多大意义。它们有完全不同的用例。

在 ms-windows 世界中,应用程序通常作为整体独立实体分布。相比之下,基本上每个 UNIX 风格都有一个工作包管理系统,这使得拥有依赖于其他包的包变得更容易。因此,如果您在 UNIX 中安装基于 python 的应用程序,则包管理系统基本上会为您安装 Python(如果尚未安装)。在 ms-windows 上,这不起作用。 ms-windows 的几个 Python 发行版如雨后春笋般涌现,因为(出于技术原因)在 ms-windows 上编译和设置东西痛苦[1] 与 UNIX 相比。因此,对于想要分发基于 Python 的程序或想要将 Python 嵌入到他们的应用程序中的人来说,拥有一个可嵌入的 Python 可能是有意义的。

一般来说,尽管我建议 ms-windows 用户安装 Canopy 或 Anaconda,因为它们带有您可能需要的大部分外部模块。

编辑截至 2020 年,python.org 分发已经走过了漫长的道路;你不再需要一个特殊的编译器,越来越多的模块在 PyPI 上为 ms-windows 分发预编译的二进制文件。所以我对 ms-windows 用户的建议发生了变化:使用 Python 的python.org releases

【讨论】:

  • 谢谢,这证实了这个“发行版(几乎)与用户的系统完全隔离,包括环境变量、系统注册表设置和已安装的软件包。” 我的第二点那么有道理。
  • @antonio 这个答案非常准确(尽管我不知道 Canopy 或 Anaconda 的背书)。可能更清楚的是,virtualenv 用于隔离已安装的包,而可嵌入 Python 用于隔离整个 Python 运行时。当您可以共享运行时但不能共享已安装的包(大多数 Web 应用程序都属于此类)时,您使用 virtualenv;当您不想共享全局安装时,您使用可嵌入的 Python(这对于许多桌面应用程序来说很有意义。)。从开发的角度来看,使用嵌入式版本可能会比较麻烦。
  • @jpmc26:我看到他们都为每个环境使用不同的运行时。或者您是在谈论 virtualenv 选项Using Virtualenv without bin/python
  • +1 好点。最后一件事,拜托。 Virtualenv 通常与 virtualenvwrapper 一起使用,它需要一些类似 bash 的环境。不幸的是 MSYS2 附带了一个包系统(Arch Linux pacman),安装了一个不兼容的 Python,所以 Virtualenv/virtualenvwrapper 不起作用。因此,脚本下载/提取可嵌入 Python zip 的副本非常方便。在可嵌入的 Python 中安装 django 后,是否可以在服务器站点上需要相同的库并像使用 Virtualenv 一样传输项目?还是又是一种痛苦?
  • @jpmc26 tkinter 的缺席也让我感到困惑。考虑到嵌入式 Python 的双重用途,我猜测它主要是为那些想要在他们的应用程序中嵌入 Python 的人设计的。
猜你喜欢
  • 2016-10-09
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多