conda环境的activate脚本

通过Python虚拟环境(Virtual Environment)创建可以创建一个独立的Python运行环境,其Script目录下有各种shell环境下的activate脚本。

但是conda创建的环境里面却没有,需要通过conda activate去激活使用环境,这就需要目标机器上也要安装conda工具才行。

所以可以仿照venv模块创建的虚拟环境,自己写一个activate脚本。

这里提供两个脚本,分别用于 Windows 下面的命令提示符环境(activate.bat) 和 Linux/macOS或Windows下的bash shell环境 (activate.sh)。

请将这两个文件放在 Python 环境根目录 下(即与 LibScriptsbin 同级的目录)。

1. Windows 脚本 (activate.bat)

这个脚本会自动获取当前 bat 文件所在的目录,将其设置为 PYTHONHOME 并添加到 PATH 中。

@echo off
rem 获取当前脚本所在的绝对路径
set "ENV_ROOT=%~dp0"
rem 去掉路径末尾的反斜杠
set "ENV_ROOT=%ENV_ROOT:~0,-1%"

rem 保存旧的系统变量以便退出时恢复 (可选)
if not defined _OLD_PATH set "_OLD_PATH=%PATH%"
if not defined _OLD_PROMPT set "_OLD_PROMPT=%PROMPT%"

rem 设置 PYTHONHOME 为当前目录 (防止引用系统其他 Python 库)
set "PYTHONHOME=%ENV_ROOT%"

rem 将根目录和 Scripts 目录添加到 PATH
rem 注意:有些 Python 发行版 python.exe 在根目录,有些在 Scripts,这里都加进去
set "PATH=%ENV_ROOT%;%ENV_ROOT%\Scripts;%ENV_ROOT%\Library\bin;%PATH%"

rem 修改命令行提示符,提示已进入环境
set "PROMPT=(PortableEnv) %PROMPT%"

echo.
echo ==================================================
echo  Python Environment Activated
echo  Location: %ENV_ROOT%
echo ==================================================
echo.

rem 定义 deactivate 命令 (利用 doskey 宏)
doskey deactivate=set "PATH=%_OLD_PATH%" ^& set "PROMPT=%_OLD_PROMPT%" ^& set "PYTHONHOME=" ^& echo Deactivated.

使用方法:

  1. 双击运行,或者在 CMD 中输入 activate.bat
  2. 输入 python 即可使用当前目录下的 Python。
  3. 输入 deactivate 可以退出环境(恢复环境变量)。

2. Linux / macOS 脚本 (activate.sh)

Linux 下通常需要使用 source 命令来运行脚本,以便在当前 Shell 会话中生效。

#!/bin/bash

# 获取脚本所在的目录 (兼容 bash 和 zsh)
# 注意:这个脚本必须被 source,不能直接 ./运行
if [ -n "$BASH_SOURCE" ]; then
    ENV_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
elif [ -n "$ZSH_VERSION" ]; then
    ENV_ROOT="$(cd "$(dirname "${(%):-%x}")" && pwd)"
else
    ENV_ROOT="$(cd "$(dirname "$0")" && pwd)"
fi

# 保存旧变量
if [ -z "${_OLD_PATH:-}" ]; then
    export _OLD_PATH="$PATH"
fi

if [ -z "${_OLD_PS1:-}" ]; then
    export _OLD_PS1="${PS1:-}"
fi

# 设置 PYTHONHOME
export PYTHONHOME="$ENV_ROOT"

# 添加 bin (Linux标准) 和 Scripts (Windows习惯) 到 PATH,以防万一
export PATH="$ENV_ROOT/bin:$ENV_ROOT/Scripts:$PATH"

# 修改终端提示符
export PS1="(PortableEnv) ${PS1:-}"

# 定义 deactivate 函数
deactivate() {
    export PATH="$_OLD_PATH"
    export PS1="$_OLD_PS1"
    unset PYTHONHOME
    unset -f deactivate
    echo "Deactivated."
}

echo "Python Environment Activated at: $ENV_ROOT"

使用方法:

  1. 打开终端。
  2. 运行命令:source activate.sh (或者 . activate.sh)。
  3. 输入 python 验证路径。
  4. 输入 deactivate 退出环境。

核心原理解析

  1. 动态路径获取

    • Windows 使用 %~dp0 获取当前脚本位置。
    • Linux 使用 $(dirname "${BASH_SOURCE[0]}") 获取 source 脚本的位置。
    • 这确保了你把整个文件夹拷贝到 D 盘、E 盘或 Linux 的 /opt 目录下都能直接运行,无需修改代码。
  2. 设置 PYTHONHOME

    • 这是制作便携式 Python 的关键。设置它会告诉 Python:“不要去系统默认路径找库文件,只在我指定的这个目录下找 Lib”。
  3. 设置 PATH

    • 将环境的目录放在 %PATH%最前面,确保系统优先调用这里的 pythonpip,而不是系统自带的。
posted @ 2026-01-27 17:40  乌合之众  阅读(1)  评论(0)    收藏  举报
clear