将包添加到适用于 Windows 的 Python“嵌入式”安装
Posted
技术标签:
【中文标题】将包添加到适用于 Windows 的 Python“嵌入式”安装【英文标题】:Adding packages to Python "embedded" installation for Windows 【发布时间】:2018-09-19 03:13:05 【问题描述】:来自the documentation:
嵌入式发行版是一个 ZIP 文件,其中包含一个最小的 Python 环境。
听起来不错! Python 的 64 位 Windows Embedded v3.6.5 只有 13MB。作为编译的替代方法,我想将一些 python 脚本连同在没有安装 Python 的 Win10 机器上运行它们所需的最低要求一起压缩。
现在,我几乎总是需要导入额外的包来提供功能。但是,如果我想将 python 脚本与这个嵌入式版本的 Python 一起发送,我无法确定我应该如何执行此操作。例如,如果我的脚本使用 numpy,我如何在这个“嵌入”中包含该库?即,以便在任何 Win10 机器上解压缩单个部署文件并立即执行我的脚本?
(普通的pip install numpy
似乎创建了一个超过 50MB 的 Lib 子目录!但对于“嵌入式”部署,我不需要任何调试支持或包含在大量文件中的任何其他内容。)
【问题讨论】:
您是否有理由不能使用requirements.txt
,然后让它们在执行脚本之前运行pip install -r requirements.txt
?
@AaronN.Brock:文档警告:此发行版不支持像常规 Python 安装那样使用 pip 来管理依赖项,但请注意它可能包含和使用pip 用于自动更新。 我想如果我对该警告的阅读过多,我可以尝试一下....
modulefinder 可能会派上用场。检查***.com/questions/39539089/… 看看我是如何使用它的。
相关:pip with embedded python
【参考方案1】:
有一种方法可以扩展 Python 嵌入式安装。 我设法创建了 Flask-ready 包,我可以在目标机器上解压缩并运行代码。 诀窍是安装 EXACT same python 版本(普通的完整 python)作为您的目标嵌入式小型 python。不仅版本要匹配,x86、x64也要匹配。
然后在普通 python 上从 pip 安装模块,转到 NormalPython\Lib\site-packages 并将安装包后出现的所有新文件复制到 EmbeddedPython\Lib 最后将 Lib 和 Lib\site-packages 添加到 pythonXX._pth 内 Embedded python 文件夹。
全面测试您的应用程序非常重要,以防您错过某些软件包。 这也不适用于将 .exe 添加到 Scripts 文件夹的软件包。 您仍然可以将 exe 复制到 Script 文件夹并将其添加到可以解决问题的路径中。
【讨论】:
在没有 ._pth 文件的情况下,如果他们的potential deprecation in Python 3.8,你将如何做到这一点? I found a more explicit script-based explanation 似乎遵循这种模式,但压缩了依赖项。 (它也使用 _pth。) 如果您不确定需要将什么文件复制到嵌入式安装中:导入sys.path
,这是绝大多数开发人员仍然认为是个好主意,并且绝对不会很快消失,即使任意代码执行确实被删除了。
【参考方案2】:
有一种方法可以扩展 Python 嵌入式安装。诀窍是安装与目标嵌入式 python 相同的 python 版本(我称之为 NormalPython)(我称之为 EmbeddedPython)。版本和架构必须完全匹配。
然后您在 NormalPython 上从 pip 安装模块。您可以在 NormalPython\Scripts 上找到 pip。
转到 NormalPython\Lib\site-packages 并将安装后出现的所有文件复制到 EmbeddedPython\Lib\
然后将Lib添加到嵌入式python文件夹中的pythonXX._pth。
在通过 https://www.python.org/downloads/windows/ 下载最新的 python 嵌入和 python 安装后,这对我在 Windows 10 上有效。 我使用了 Michal Rawluk 的答案,但它有点难以理解,所以我试图用不同的方式来解释它。
【讨论】:
【参考方案3】:有一个类似的技巧。
在嵌入式版本中安装 pip:
curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
通过添加编辑pythonXX._pth
库
库\站点包
使用 pip 安装其他包
【讨论】:
您可能希望更准确地引用“类似技巧”。你指的是另一个答案吗?然后你可以注意“类似于xyz答案的技巧”以上是关于将包添加到适用于 Windows 的 Python“嵌入式”安装的主要内容,如果未能解决你的问题,请参考以下文章
cx_freeze:如何将包文件添加到 library.zip 中?
在 Python 中编写适用于 Windows 中的 Python 2.7+ 和 Python 3.3+ 的 .CSV 文件
无法在适用于 Windows 的 Python 3.7 上安装 win32core