Skip to content

Commit 337443a

Browse files
committed
Windows 上检测 python3 为微软商店占位符时不再直接退出,而是接着检测 python
[GitHub #351]
1 parent c91c65e commit 337443a

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

src/recipe/lang/Python/common.h

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pl_python_group_prelude (void)
3333
chef_prep_this (pl_python_group, gsr);
3434

3535
chef_set_recipe_created_on (this, "2023-09-03");
36-
chef_set_recipe_last_updated (this, "2025-12-31");
36+
chef_set_recipe_last_updated (this, "2026-03-31");
3737
chef_set_sources_last_updated (this, "2025-09-30");
3838

3939
chef_set_chef (this, "@happy-game");
@@ -105,6 +105,13 @@ pl_python_get_py_program_name (char **prog_name)
105105
*/
106106
py_exist = chsrc_check_program ("python3");
107107

108+
bool python3_is_winstore_placeholder = false;
109+
110+
const int winstore_python_status_code = 9009;
111+
112+
const char *winstore_placeholder_cn = "是微软商店的占位符,并非真正可用的 Python";
113+
const char *winstore_placeholder_en = "a placeholder of Microsoft Store, not the real Python";
114+
108115
if (py_exist)
109116
{
110117
*prog_name = "python3";
@@ -113,16 +120,19 @@ pl_python_get_py_program_name (char **prog_name)
113120
if (xy.on_windows)
114121
{
115122
int status = xy_run_get_status ("python3 --version");
116-
if (status == 9009)
123+
if (status == winstore_python_status_code)
117124
{
118-
chsrc_error2 (CHINESE ? "用户环境中的 `python3` 命令,是微软商店的占位符,并非真正可用的 Python。请安装真正的 Python 后重试!"
119-
: "`python3` in your environment is a placeholder of Microsoft Store, not the real Python which can be used, please install the real Python and try again!");
120-
exit (Exit_UserCause);
125+
python3_is_winstore_placeholder = true;
126+
*prog_name = NULL;
127+
// https://github.com/RubyMetric/chsrc/issues/351
128+
// 仅警告,不要直接退出,因为用户环境中还可能存在真正的 `python` 命令
129+
chsrc_warn2 (CHINESE ? xy_2strcat ("用户环境中的 `python3` 命令,", winstore_placeholder_cn)
130+
: xy_2strcat ("`python3` in your environment is ", winstore_placeholder_en));
121131
}
122132
}
123-
124133
}
125-
else
134+
135+
if (!py_exist || python3_is_winstore_placeholder)
126136
{
127137
/**
128138
* 不要直接:
@@ -134,7 +144,22 @@ pl_python_get_py_program_name (char **prog_name)
134144
*/
135145
py_exist = chsrc_check_program ("python");
136146

137-
if (py_exist) *prog_name = "python";
147+
if (py_exist)
148+
{
149+
if (xy.on_windows)
150+
{
151+
int status = xy_run_get_status ("python --version");
152+
if (status == winstore_python_status_code)
153+
{
154+
chsrc_warn2 (CHINESE ? xy_2strcat ("用户环境中的 `python` 命令,也", winstore_placeholder_cn)
155+
: xy_2strcat ("`python` in your environment is also ", winstore_placeholder_en));
156+
chsrc_error (CHINESE ? "请安装真正的 Python 后重试!"
157+
: "Please install the real Python and try again!");
158+
exit (Exit_UserCause);
159+
}
160+
}
161+
*prog_name = "python";
162+
}
138163
else
139164
{
140165
chsrc_error ("未找到 Python 相关命令,请检查是否存在");

0 commit comments

Comments
 (0)