Python 从批处理文件启动的脚本看不到批处理文件中设置的环境变量
Python script kicked off from batch file can't see env vars set in batch file
我正在使用 .bat
文件来:
- 设置环境变量
- 启动 Python 程序(使用这些环境变量)
@ECHO OFF
REM TODO: figure out why Python can't see this
SET MY_ENV_VAR="foo"
CALL C:\code\repo\venv\Scripts\activate
CD /d C:\code\repo
@ECHO ON
REM kick off Python, where os.getenv can't see MY_ENV_VAR
CMD /k run_python_console_script
如果您好奇,run_python_console_script
会启动通过 Entry Point 发出的命令。
当我 运行 os.getenv("MY_ENV_VAR")
它不 return "foo"
时,它 return 是 None
。这是为什么?
我不想使用 SETX
(docs),我希望环境变量的范围仅限于此批处理脚本。
其他答案
How to access Batch Script variables in python? and 想要调用 .bat
脚本作为子进程。我不想这样做,.bat
脚本是我的父进程。
virtualenvwrapper
支持 postactivate
脚本(参见
and Set specific environment variables activating a Python virtual environment) 但我没有使用 virtualenvwrapper
.
来自https://ss64.com/nt/set.html
使用 SET 命令所做的更改不是永久性的,它们仅适用于当前的 CMD 提示并且仅在 CMD window 关闭之前保留。
要在命令行中永久更改变量,请使用 SetX
感谢@Mofi 在评论部分提供了许多可能的尝试!
问题出现在链接到此处的第一条评论中(在环境变量周围放置 ""
):
REM TODO: figure out why Python can't see this
SET MY_ENV_VAR="foo"
REM DONE: this works (quotes on outside)
SET "MY_ENV_VAR=foo"
似乎 venv
激活并没有破坏先前存在的环境变量,正如@JohnGordon 在评论中推测的那样。
当 pip install
ed on Windows 时,run_python_console_script
Entry Point 作为 venv\Scripts\run_python_console_script.exe
安装到 venv
。
我正在使用 .bat
文件来:
- 设置环境变量
- 启动 Python 程序(使用这些环境变量)
@ECHO OFF
REM TODO: figure out why Python can't see this
SET MY_ENV_VAR="foo"
CALL C:\code\repo\venv\Scripts\activate
CD /d C:\code\repo
@ECHO ON
REM kick off Python, where os.getenv can't see MY_ENV_VAR
CMD /k run_python_console_script
如果您好奇,run_python_console_script
会启动通过 Entry Point 发出的命令。
当我 运行 os.getenv("MY_ENV_VAR")
它不 return "foo"
时,它 return 是 None
。这是为什么?
我不想使用 SETX
(docs),我希望环境变量的范围仅限于此批处理脚本。
其他答案
How to access Batch Script variables in python? and .bat
脚本作为子进程。我不想这样做,.bat
脚本是我的父进程。
virtualenvwrapper
支持 postactivate
脚本(参见
virtualenvwrapper
.
来自https://ss64.com/nt/set.html
使用 SET 命令所做的更改不是永久性的,它们仅适用于当前的 CMD 提示并且仅在 CMD window 关闭之前保留。
要在命令行中永久更改变量,请使用 SetX
感谢@Mofi 在评论部分提供了许多可能的尝试!
问题出现在链接到此处的第一条评论中(在环境变量周围放置 ""
):
REM TODO: figure out why Python can't see this
SET MY_ENV_VAR="foo"
REM DONE: this works (quotes on outside)
SET "MY_ENV_VAR=foo"
似乎 venv
激活并没有破坏先前存在的环境变量,正如@JohnGordon 在评论中推测的那样。
当 pip install
ed on Windows 时,run_python_console_script
Entry Point 作为 venv\Scripts\run_python_console_script.exe
安装到 venv
。