conda

conda存在形态

交互入口环境配置物理文件罗列环境创建环境切换环境删除环境
anaconda 命令行~\.condarc...\anaconda3\envsconda env listconda create -n py310 python=3.10conda activate py310conda remove --all -y -n py310
物理删
anaconda 客户端env列表点击创建env点环境点remove
物理删
pycharm 设置interpreter>local conda点创建conda点exist condashow all>移除
逻辑删

conda源管理

  • conda info 查看当前所有的源信息
  • conda search python 查看所有可用的python版本
  • conda search python=3.8 --subdir win-32 查32位包
  • conda config --show-sources(罗列本地源和仓库源)
  • conda config --show channels(罗列仓库源)
  • conda config --remove channels 源名称或链接 (移除仓库源)
  • conda config --add channels 源名或链接 (添加仓库源)
  • 64位系统,安装32位python以及pyinstaller打包
    • conda切换为32位模式:conda config --env --set subdir win-32
    • conda创建环境指定32位:conda create -n test 32 python=3.10 --override-channels --subdir win-32 -c https://repo.anaconda.com/pkgs/main
    • conda 32位最新支持到python3.10
ssl_verify: true
show_channel_urls: true

## custom local dir
envs_dirs:
  - D:\codePython\python\anaconda3
pkgs_dirs:
  - D:\codePython\anaconda3\pkgs

#proxy_servers:
#  http: http://127.0.0.1:1081

channels:
  - defaults

# channel - qinghua
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/

conda包管理

  • 清除全部缓存: conda clean --all 或 conda clean -a
  • 清除包缓存: conda clean -p
  • 清除tar包缓存: conda clean -t
  • 检查环境:conda doctor
  • 修复元数据:conda repair
  • 查看变动版本 conda list --revisions 查看当前环境后续折腾过的情况
  • 版本回滚 conda install --revision REV_NUM 回滚重置当前环境,默认为0
  • 安装包 conda install -c conda-forge ffn
  • 问题:激活环境后,有冗余包的解决。
    排查:执行python -m site,可以看到conda虚拟环境会从C:\Users\cat\AppData\Roaming\Python\Python38\site-packages带入很多包,污染了。这是因为安装时,用了 --user, 这个命令会安装到用户级别的python包环境下,并被conda创建的环境共享。
    解决:激活环境下,把这些包都卸载了。再次安装即可
    验证:在激活环境里再次安装包,只会出现在虚拟环境的包目录下,不会到用户级别环境的包目录。

环境重置脚本

#!/usr/bin/env python3
# coding=utf-8
"""
@File : utils_reset_python_env.py
@Author  : AT
@Create  : 2023/6/16 15:52
@Desc    : 切换到需要重置清空的python环境,运行main方法或本文件即可
"""
import sys
import platform
import pkg_resources
import subprocess

def reset_packages_init(_init_list=['pip', 'setuptools', 'wheel']):
    _print_python_interpreter()
    _exist_list = _get_packages()
    print(f"当前环境:初始化为: ({' '.join(_init_list)})")
    _remove_list = list(set(_exist_list) - set(_init_list))
    if _remove_list:
        print(f"当前环境:pip uninstall -y {' '.join(_remove_list)}")
    user_input = input("当前环境:pip uninstall continue: 0-No(默认), 1-Yes")
    print(f'当前环境:pip uninstall continue:: 你的选择 = {user_input}')
    if user_input == '1':
        for _package in _remove_list:
            _uninstall_package(_package)
        _get_packages()
    sys.exit()


def _print_python_interpreter():
    print(f"当前环境:python版本={platform.python_version()}, 解释器路径={sys.executable})")

def _get_packages():
    # 获取当前 Python 系统中所有已安装包的列表
    installed_packages = pkg_resources.WorkingSet()
    installed_packages_name = [dist.project_name for dist in installed_packages]
    print(f"当前环境:installed_packages=({' '.join(installed_packages_name)})")
    return installed_packages_name

def _uninstall_package(package):
    try:
        subprocess.run(['pip', 'uninstall', '-y', package])
    except Exception as e:
        print(f"卸载:{package} 失败!An error occurred: {e}")

if __name__ == '__main__':
    reset_packages_init()

jupyter管理

  • 查看kernel
    方式一:notebook选择kernel下拉列表
    方式二:jupyter kernelspec list
  • 创建kernel
    conda install ipykernel
    python -m ipykernel install --user --name test3810 --display-name Python (test3810)"
  • 启动notebook服务
    pycharm终端:jupyter notebook --port 8889
    开始菜单:Jupyter Notebook (quant3810).lnk
    虚拟机jupyter服务:jupyter notebook --ip=0.0.0.0 需在虚拟机增加端口白名单
  • 删除kernel
    方式一:jupyter kernelspec uninstall test3810
    方式二:python -m ipykernel uninstall --name test3810