批量移除Python虚拟环境(从管理列表中移除) :param path: 要移除的Python环境路径 :param more_path: 其他要移除的路径(可变参数) :return: 错误信息或None(成功) 可以移除的条件, 1.是python_manager/pyporject_evn下的环境, 2.非conda环境, 3.无项目使用中, 4.system环境,需要无以此环境为home的vnev环境
(self, *more_path: str)
| 1191 | return None |
| 1192 | |
| 1193 | def multi_remove_env(self, *more_path: str) -> List[Dict]: |
| 1194 | """批量移除Python虚拟环境(从管理列表中移除) |
| 1195 | |
| 1196 | :param path: 要移除的Python环境路径 |
| 1197 | :param more_path: 其他要移除的路径(可变参数) |
| 1198 | :return: 错误信息或None(成功) |
| 1199 | 可以移除的条件, |
| 1200 | 1.是python_manager/pyporject_evn下的环境, |
| 1201 | 2.非conda环境, |
| 1202 | 3.无项目使用中, |
| 1203 | 4.system环境,需要无以此环境为home的vnev环境 |
| 1204 | """ |
| 1205 | # 合并所有待删除路径并进行标准化处理 |
| 1206 | paths_to_remove = {os.path.normpath(p) for p in more_path} |
| 1207 | |
| 1208 | to_remove = [] |
| 1209 | saved = [] |
| 1210 | |
| 1211 | for p in self.all_env: |
| 1212 | if p.bin_path in paths_to_remove: |
| 1213 | to_remove.append(p) |
| 1214 | paths_to_remove.remove(p.bin_path) |
| 1215 | else: |
| 1216 | saved.append(p) |
| 1217 | |
| 1218 | if paths_to_remove: |
| 1219 | msg = "Python环境不存在:%s" |
| 1220 | return [{"path": p, "status": False, "msg": msg % p} for p in paths_to_remove] |
| 1221 | |
| 1222 | bin_path2project = self.all_python_project_map() |
| 1223 | # 优先处理顺序 有项目使用的、conda、venv、system(非系统)、系统环境 |
| 1224 | to_remove.sort(key=lambda x: ( |
| 1225 | x.bin_path not in bin_path2project, |
| 1226 | ("conda", "venv", "system").index(x.env_type), |
| 1227 | any(x.bin_path.startswith(syp) for syp in _SYS_BIN_PATH) |
| 1228 | )) |
| 1229 | |
| 1230 | res_map = {p.bin_path: { |
| 1231 | "path": p.bin_path, "status": True, "msg": "Python环境删除成功" |
| 1232 | } for p in to_remove} |
| 1233 | |
| 1234 | real_remove = [] |
| 1235 | for p in to_remove: |
| 1236 | if p.env_type == "conda": |
| 1237 | res_map[p.bin_path].update( |
| 1238 | status=False, |
| 1239 | msg="Conda环境不支持操作,请在命令行中执行conda remove -n {}".format(p.venv_name) |
| 1240 | ) |
| 1241 | saved.append(p) |
| 1242 | continue |
| 1243 | elif p.bin_path in bin_path2project: |
| 1244 | res_map[p.bin_path].update( |
| 1245 | status=False, |
| 1246 | msg="Python环境正在被项目【{}】使用,请先删除项目再操作".format(bin_path2project[p.bin_path][0]) |
| 1247 | ) |
| 1248 | saved.append(p) |
| 1249 | continue |
| 1250 | elif not p.bin_path.startswith(python_manager_path()) and \ |
no test coverage detected