import

import #

Python 导入搜索顺序 #

当你启动 Python 时,它会构造一个列表 sys.path,按从左到右顺序查找模块/包:

  1. 脚本所在目录
    1. 或空字符串 '' 代表“当前工作目录”
      1. 当你用 python -c “…” 执行命令时
      2. 或者用 python -m modulename 模块方式运行
      3. 或者在交互式解释器里直接执行时
  2. PYTHONPATH 环境变量里声明的路径(如果有)
  3. 标准库路径
  4. 虚拟环境的 site-packages(…/.venv/lib/pythonX.Y/site-packages)
(vllm) root@lts-4090:/mnt/data1/yewang/study/vllm# cat test.py
import sys
print(sys.path)

(vllm) root@lts-4090:/mnt/data1/yewang/study/vllm# python test.py
['/mnt/data1/yewang/study/vllm', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python312.zip', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/lib-dynload', '/mnt/data1/yewang/study/vllm/.venv/lib/python3.12/site-packages']
(vllm) root@lts-4090:/mnt/data1/yewang/study/vllm# cd ..
(vllm) root@lts-4090:/mnt/data1/yewang/study# python vllm/test.py
['/mnt/data1/yewang/study/vllm', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python312.zip', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/lib-dynload', '/mnt/data1/yewang/study/vllm/.venv/lib/python3.12/site-packages']


(vllm) root@lts-4090:/mnt/data1/yewang/study/vllm# python -c "import sys; print(sys.path)"
['', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python312.zip', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/lib-dynload', '/mnt/data1/yewang/study/vllm/.venv/lib/python3.12/site-packages']
(vllm) root@lts-4090:/mnt/data1/yewang/study/vllm# cd ..
(vllm) root@lts-4090:/mnt/data1/yewang/study# python -c "import sys; print(sys.path)"
['', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python312.zip', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12', '/root/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/lib-dynload', '/mnt/data1/yewang/study/vllm/.venv/lib/python3.12/site-packages']
  • python -c "import vllm; print(vllm.**file**)"
  • 你在仓库根目录 /mnt/data1/yewang/study/vllm 下用 python -c … 测试时,sys.path[0] == ''(当前工作目录),第一个被查找的就是仓库根目录,这里恰好有个顶层目录 vllm/(源码包),于是就命中了源码版本,而不是 site-packages 里的已安装版本。
  • examples/offline_inference/basic/basic.py 时,你又是在仓库里运行。多数情况下 sys.path[0] 会是 脚本所在目录(…/examples/offline_inference/basic)。如果环境里 PYTHONPATH 含仓库根、或示例脚本/启动器做了路径注入(把仓库根加进 sys.path),仓库根就会进入前几位,仍然会先命中本地 vllm/。

本文访问量

本站总访问量

本站总访客数