跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    Fedora 上的 Python 环境:venv、pipx、uv 与国内源

    Terminal window
    python3 -V
    rpm -q python3
    Python 3.15.0rc1
    python3-3.15.0~rc1-1.fc45.x86_64

    Fedora 的 Python 装在 /usr,sys.prefix 就是 /usr——这是系统组件,dnf 自己就依赖它。

    系统 python3、版本化 python3.13/3.14 与 venv 三条路径并行

    不要 sudo pip install。 理由不是洁癖:

    • 会往 /usr/lib/python3.15/site-packages 写文件,与 rpm 管理的文件混在一起
    • dnf upgrade 时可能被覆盖,也可能因为冲突导致升级失败
    • 破坏的是系统工具链本身(dnf5 就是 Python 写的)

    需要装包,永远用下面三种隔离之一。

    Terminal window
    mkdir -p ~/proj && cd ~/proj
    python3 -m venv .venv
    source .venv/bin/activate
    pip install requests
    Terminal window
    which python
    /home/labuser/proj/.venv/bin/python

    退出:deactivate。

    venv 只隔离包,解释器还是系统的 3.15。绝大多数项目到这一步就够。

    配置文件按优先级:项目级 pip.conf < 用户级 ~/.config/pip/pip.conf < 全局 /etc/pip.conf。

    Terminal window
    mkdir -p ~/.config/pip
    cat > ~/.config/pip/pip.conf <<'EOF'
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    EOF

    验证:

    Terminal window
    pip config list
    global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'

    临时用一次不写配置,加 -i:

    Terminal window
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

    镜像是否更快取决于你的线路,实测方法见国内加速源。

    有些包是应用不是库(比如 black、httpie、ansible),它们需要独立的虚拟环境,否则会和其他项目的依赖打架。用 pipx:

    Terminal window
    sudo dnf install pipx
    pipx ensurepath
    pipx install black
    black --version

    pipx list 能看到每个工具的独立环境:

    Terminal window
    pipx list

    升级也统一:pipx upgrade-all。

    第三层:uv(要换解释器版本时)

    Section titled “第三层:uv(要换解释器版本时)”

    Fedora 仓库默认只给一个 Python(python3 = 3.15.0rc1),但它确实提供了版本化并存包。实测:

    Terminal window
    sudo dnf install python3.13 python3.14
    python3.13 --version # Python 3.13.15
    python3.14 --version # Python 3.14.7
    python3 --version # Python 3.15.0rc1

    三个解释器并存在 /usr/bin/ 下,互不干扰。细节见多版本并存。

    要更早的版本(3.12 及以前),或者需要更多控制:

    Terminal window
    curl -LsSf https://astral.sh/uv/install.sh | sh
    Terminal window
    uv python install 3.12
    uv python list
    uv venv --python 3.12

    uv 自己管理解释器下载与缓存,不碰系统 Python。

    也可以用 pyenv:

    Terminal window
    curl https://pyenv.run | bash
    pyenv install 3.12.7
    pyenv global 3.12.7
    需求用什么
    项目装依赖venv
    装命令行工具(black/httpie/ansible)pipx
    要另一个解释器版本uv 或 pyenv
    要完全隔离的系统环境容器(见容器)
    CI 里固定版本容器镜像
    现象原因
    pip: command not found新装系统没装 pip,用 python3 -m pip 或 dnf install python3-pip
    error: externally-managed-environmentFedora 阻止直接写系统 site-packages,正是要你用 venv
    ModuleNotFoundError 明明装过装在了另一个解释器/另一个 venv 里,用 which python 确认
    venv 里命令找不到忘了 source .venv/bin/activate
    系统工具报 Python 错误之前 sudo pip 污染了系统包,用 rpm -V python3-libs 核对