Python 任务安装分发包与导入使用指南

本文介绍如何在 Python 任务运行时临时安装第三方包,并在后续代码中导入使用。

适用场景

  • 需要在任务运行时临时安装第三方包。
  • 需要从公网官方源(PyPI)或国内镜像(清华源等)安装包。
  • 需要将包安装到
    /tmp
    /tmp
    下的临时目录后再
    import
    import

运行时安装说明

  • Python 任务运行在临时 Pod 中,任务结束后环境会销毁。每次运行都需要重新安装依赖,不要依赖上一次的安装结果。
  • Python 任务以非 Root 用户执行,不能向系统级
    site-packages
    site-packages
    目录安装依赖。请使用
    --target
    --target
    将包安装到
    /tmp
    /tmp
    下的独立临时目录,并在导入前将该目录加入
    sys.path
    sys.path
  • /tmp
    /tmp
    仅用于当前任务运行期间的临时文件,不适合保存需要持久化的数据。

标准模板(推荐直接复用)

import subprocess import sys TARGET_DIR = "/tmp/python_packages" INDEX_URL = "https://pypi.org/simple" subprocess.check_call([ sys.executable, "-m", "pip", "install", "config", "--target", TARGET_DIR, "--index-url", INDEX_URL, "--no-cache-dir", ]) sys.path.insert(0, TARGET_DIR) import config

快速切换到清华源

公网访问 PyPI 较慢时,可以将模板中的

INDEX_URL
INDEX_URL
改为清华源:

INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple"

常见错误与排查

报错:
ModuleNotFoundError: No module named 'xxx'
ModuleNotFoundError: No module named 'xxx'

按顺序检查:

  • 是否使用了
    --target
    --target
    ,但没有把该目录加入
    sys.path
    sys.path
  • 是否在
    import
    import
    之后才将目录加入
    sys.path
    sys.path
  • 是否使用了
    sys.path.append()
    sys.path.append()
    将路径加到末尾,导致包被其他同名模块遮蔽。建议使用
    sys.path.insert(0, TARGET_DIR)
    sys.path.insert(0, TARGET_DIR)
  • 包名与模块名是否一致(有些包
    pip install A
    pip install A
    ,但
    import B
    import B
    )。

报错:
Permission denied
Permission denied

检查

--target
--target
是否指向
/tmp
/tmp
下的目录。不要使用
/home
/home
、系统
site-packages
site-packages
或其他未明确允许写入的目录。

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询