使用脚本中的 Python 包而不安装它

Use a Python package from a script without installing it

我有一个 python 脚本,它将由系统 python(在 OSX /usr/bin/python 上)执行。这个脚本使用了一个外部包(在我的例子中 PyYaml)。

如何在不 pip 将其安装到系统 python 的情况下提供软件包。我也不想为此脚本创建虚拟环境,因为该脚本也适用于 运行 在其他 "vanilla" OSX 机器上。

我正在考虑在脚本所在的同一路径下创建一个目录,"dumping" 外部包也在那里。但是以什么形式呢?我必须在我的脚本中做什么,才能 "sees" 本地转储包?只需修改 sys.path?

您只需将 pyYaml 的 *.py 文件复制粘贴到您的脚本目录中,然后像导入您自己的模块一样导入它们。这不是最漂亮的解决方案,但它确实有效。
如果你打算使用 C 后端,那就更难了。您要么需要确保您的安装程序正确编译它们,要么使用编译的 C 模块制作依赖于平台的发行版。但是那些是为了速度和纯 Python 代码就足够了。

作为 Synedraacus's 的增强: (*)

您可以将 PyYAML 的整个 yaml 子目录复制到您的脚本目录中(如果您使用 Python 2 和 lib3/yaml,它位于 PyYAML zip 文件 lib/yaml 中Python 3).然后你可以在你的代码中使用它,就像你安装了 PyYaml pip 一样。随便写:

import yaml

这当然只有在您不想使用 C 后端时才有效。


(*) 我试图将这个细节添加到 Synedraacus 的回答中,但我的编辑 got rejected。因此,我将此增强功能添加为单独的答案。