【问题标题】:Use a Python package from a script without installing it使用脚本中的 Python 包而不安装它
【发布时间】:2017-03-10 07:53:59
【问题描述】:

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

如何在没有pip-将其安装到系统 python 的情况下提供包。我也不想为这个脚本创建一个虚拟环境,因为这个脚本也可以在其他“vanilla”OSX 机器上运行。

我正在考虑在脚本所在的同一路径下创建一个目录,并在那里“转储”外部包。但以什么形式?我必须在我的脚本中做什么,以便它“看到”本地转储的包?修改sys.path就行了?

【问题讨论】:

  • 有时我只是将“源包”(.tar.gz、.zip 等)(在你的情况下我认为是 PyYaml)下载到任何目录然后将该目录附加到$PYTHONPATH 环境变量(取决于操作系统)。在 Mac/Linux 上,我只设置了 export PYTHONPATH=$PYTHONPATH:<path_to_python_packages_directory> ,重新加载环境。然后在 python 中“import the_package”。不幸的是,对于一些依赖于 CPython 的包,或转到操作系统级别的“C”源文件,这是不可能的,或者很少工作,但对于大多数 python 包来说是这样。
  • 我用pyYaml 试过了,它似乎可以工作(我可以导入它),但是那个包中有一些“C”源文件,所以它可能无法按预期工作。
  • @downshift 谢谢你。 应该可以只使用 PyYaml 的py-文件,因为根据 doco,PyYaml 包含“纯 Python 和基于快速 LibYAML 的解析器和发射器”(pyyaml.org/wiki/PyYAML)。所以只要我不从yaml 导入CLoaderCDumper 我应该没问题。
  • 不错不错,听起来不错

标签: python pip packages


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    作为对Synedraacusanswer 的增强: (*)

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

    import yaml
    

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2022-01-08
      • 2015-06-14
      • 2015-03-07
      • 1970-01-01
      • 2022-10-17
      相关资源
      最近更新 更多