You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Poetry无法加载环境变量?非1.2版本配置问题

解决Poetry 1.2以下版本加载环境变量的问题

核心原因

poetry shell和poetry run不会执行你修改的activate/activate.bat脚本——Poetry启动虚拟环境时是直接调用环境内的Python解释器,跳过了手动激活虚拟环境的脚本执行流程,所以你添加的变量加载逻辑不会生效。

可行解决方案

1. 前置加载环境变量再调用Poetry

直接在执行Poetry命令前先加载creds.sh里的变量,或者封装成别名/批处理:

  • Bash/Zsh环境:
    单次执行:

    set -a && . ./creds.sh && set +a && poetry shell
    

    或者添加别名到shell配置文件(如~/.bashrc、~/.zshrc),方便复用:

    alias poetry-shell='set -a && . ./creds.sh && set +a && poetry shell'
    alias poetry-run='set -a && . ./creds.sh && set +a && poetry run'
    

    之后直接用poetry-shell或poetry-run命令即可带着环境变量启动。

  • Windows CMD环境:
    单次执行:

    for /f "delims== tokens=1,2" %%G in (creds.sh) do set %%G=%%H && poetry shell
    

    也可以创建批处理文件(如poetry-shell.bat):

    @echo off
    for /f "delims== tokens=1,2" %%G in (creds.sh) do set %%G=%%H
    poetry shell
    

2. 通过Python自定义启动文件自动加载

利用Python的usercustomize.py机制,让虚拟环境的Python启动时自动加载环境变量:

  1. 进入虚拟环境的Lib/site-packages目录(Windows下路径类似.venv\Lib\site-packages,Linux/macOS下是.venv/lib/pythonX.X/site-packages)
  2. 创建usercustomize.py文件,写入以下代码:
    import os
    import shlex
    
    def load_env_from_sh(file_path):
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith('#'):
                    continue
                if '=' in line:
                    key, value = line.split('=', 1)
                    # 处理带引号的变量值
                    value = shlex.split(value)[0] if value.strip() else ''
                    os.environ[key.strip()] = value.strip()
    
    # 替换为你的creds.sh实际路径,Windows下用双反斜杠或原始字符串
    load_env_from_sh('../creds.sh')
    
    之后不管是poetry run还是poetry shell启动的Python进程,都会自动加载这些环境变量。

3. 利用Shell目录自动切换逻辑

在Bash/Zsh的配置文件中添加逻辑,进入项目目录时自动加载环境变量并激活虚拟环境:
在~/.bashrc或~/.zshrc中添加:

cd() {
    builtin cd "$@"
    if [ -d .venv ] && [ -f creds.sh ]; then
        set -a
        . ./creds.sh
        set +a
        source .venv/bin/activate
    fi
}

这样每次进入项目目录时,会自动加载creds.sh的变量并激活虚拟环境,后续执行Poetry命令时变量会自动生效。

内容的提问来源于stack exchange,提问作者DRJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:55:17