Python 包下载和虚拟环境管理
包括两部分: pip:包下载安装 venv:虚拟环境管理 在部分 Linux 发行版(例如 Ubuntu)中即使系统自带 Python,也可能只是包括了最基础的功能,并不包括 pip 和 venv,需要单独下载安装 1sudo apt-get install python3-pip python3-venv 这些内容在不同的系统(Windows/Linux)中的实现细节各有不同,在不同的 shell(pwsh/bash/fish)中,对应的脚本实现也有差异,下面以 Linux + bash 为主,也会考虑 Windows + pwsh 的情况。 pip基本使用使用 pip 可以安装 Python 包,常见形式为 1pip install <package_name> 例如安装进度条 tqdm 1pip install tqdm pip 会自动处理包的版本要求和依赖关系,依赖关系在不同系统下可能存在差异,例如: 在 Linux 上只会安装 tqdm 自身; 在 Windows 上会自动安装两个包:colorama, tqdm,前...
Jupyter notebook 本地和远程部署
整理一下 jupyter notebook 的各种使用方式。 本地部署直接在本地主机上启动 jupyter notebook 服务是最简单的用法 1jupyter notebook 需要说明的是: jupyter 服务默认监听本机的 8888 端口,如果本机的 8888 端口已经被占用,在启动时会自动递增,改为 8889 端口等,也可以使用 --port 选项指定端口; jupyter 在启动时会尝试打开本地浏览器,或者手动通过 http://localhost:8888/ 访问即可,可以加上选项阻止自动开启浏览器 --no-browser; 默认只允许接收来自 localhost 的请求,可以使用 --ip 选项指定,例如--ip=0.0.0.0 代表允许所有的 ip 访问; 默认的工作目录是执行命令时所处的目录,可以在后面加上工作目录作为位置参数,例如 jupyter notebook /path/to/notebooks,还可以使用 --notebook-dir 选项指定,例如 --notebook-dir=/path/to/notebooks。 除了直接在前台运行,...
星期算法
学习一下如何根据指定的年月日快速计算星期几,由于公历的规律性很强,将所有规律整理并不断简化就可以得到这种简便算法,有很多不同的变形算法,例如蔡勒公式,康威裁决日算法等,本文主要学习蔡勒公式。 公历简要回顾一下公历:每年12个月,每个月可能有28、29、30、31天。区分普通的年和闰年,非闰年有365天,闰年有366天,年份满足以下情况时为闰年: 年份除以100的余数不为0,除以4的余数为0 年份除以100的余数为0,并且除以400的余数为0 非闰年的12个月的天数依次为: 28天:2月 30天:4月、6月、9月、11月 31天:1月、3月、5月、7月、8月、10月、12月 闰年的12个月的天数依次为: 29天:2月 30天:4月、6月、9月、11月 31天:1月、3月、5月、7月、8月、10月、12月 由于公历于1582年10月正式建立,在这段时间以及更早的年份可能存在日期修正,细节比较复杂,不作讨论。 蔡勒公式公式如下$$w = \left( y + \left[ \frac{y}4 \right] + \left[ \frac{c}4 \ri...
Docker 入门笔记
简单学习一下 Docker。 基本概念Docker 是一种轻量级的容器化技术,与传统虚拟机相比,它更加高效,能够快速部署和运行应用程序。传统虚拟机需要完整的操作系统,每个虚拟机通常占用多个 GB,而 Docker 容器共享宿主机内核,镜像通常只有 MB 级别,占用更少的资源,启动速度更快。 首先需要区分 Docker 的两个核心概念: Docker Image(镜像):Docker 镜像是一个只读的模板(实质是宿主系统中的一个文件),包含了运行应用程序所需的所有文件和环境(包括代码、运行时、依赖项、系统工具等)。镜像可以被用来创建容器,基于一个镜像可以创建多个容器。 Docker Container(容器):容器是基于镜像创建的运行实例(实质是宿主系统中的一个进程),它提供了一个隔离的轻量级 Linux 环境,可以在其中独立运行应用程序。 容器可以被创建、启动、暂停、停止、删除等,多个容器可以在同一个主机上运行,并且它们彼此之间是相互隔离的。容器在运行过程中产生的更改通常不会影响外部系统(除非使用专门的方式,包括数据卷和绑定宿主目录等),更不会影响镜像文件。 镜像的构造过程...
Github worktree 学习笔记
简单记录一下 git worktree 的用法。worktree 允许在同一个本地仓库中同时拥有多个工作目录,每个工作目录可以对应不同的分支或提交。非常适合并行开发、快速切换上下文或测试。 为什么需要 worktree?在传统的 git 使用中,一个本地仓库只有一个工作目录(即你当前检出的分支)。如果你需要同时处理两个不同的分支,通常的做法是: 克隆多个仓库,可以按需要分别对应不同分支,但这样会浪费空间且难以同步。 暂存当前工作,切换到另一个分支,完成工作后再切换回来,但是 stash 也可能有残留文件,而且切换可能出现问题。 worktree 解决了这个问题:它允许你为同一个仓库创建额外的工作目录,每个工作目录都有自己的实际文件夹、索引和 HEAD,它们共享同一个仓库的对象数据库和引用(refs)。 worktree 原理Git 默认将数据检出到一个工作目录(即仓库的根目录),对于裸仓库,则不会检出。而 worktree 提供了检出多个工作目录的选择,并且这些工作目录之间共享同一个 Git 仓库的数据库和引用(refs)。具体地说: 多个工作目录共享同一个 .git/ 目...
Linux Socket 编程入门
关于计算机网络以及Socket编程相关的概念性知识,可以参考相关资料,这里只列举了常见函数的用法,以及两个简单的例子。 Socket 相关函数socket 函数创建socket(套接字) 123#include <sys/socket.h>int socket(int family, int type, int protocol); 参数: family:协议族,通常取 AF_INET(IPv4) 或 AF_INET6(IPv6) type:套接字类型,通常取 SOCK_STREAM(TCP) 或 SOCK_DGRAM(UDP) protocol:协议,可以取IPPROTO_TCP、IPPTOTO_UDP,但是更建议直接取0,表示自动使用默认的协议 返回值: 创建成功:返回一个新的套接字文件描述符sockfd 创建失败:返回 -1,通过errno获取错误信息 因此最常见的两种用法以及错误处理如下 12345678910111213// TCPint sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd <...
VSCode Python 配置
这部分配置应该过时了,VSCode 的 Python 插件越搞越多,越搞越乱,而且居然还都是微软官方的。。。 相关插件VSCode 与 Python 有关的插件如下:(巨硬把这些插件拆分的实在太细了) Python Python Debugger Python Environments Pylance:Python语言服务器,支持自动补全、代码提示等 Black Formatter:代码格式化(需要通过 conda/pip 下载对应模块) Flake8:代码静态分析(需要通过 conda/pip 下载对应模块) Jupyter 插件包: Jupyter Jupyter Keymap Jupyter Cell Tags Jupyter Notebook Renderers Jupyter Slide show 注意需要单独下载 black 和 flake8 包,例如 1conda install black flake8 如果语法高亮等出现问题,最好先清理相关的配置缓存并重启VSCode,可以解决不少问题。 VSCode 插件配置下面是目前VSCode关于Pyth...
Pytorch 环境配置记录
记录一下当前 Python 涉及的一些环境配置。 基本信息当前本地以及服务器的Python和CUDA的基本信息如下: Windows(以及WSL): Windows 11 miniconda Python 版本为 3.12.1 CUDA 驱动最高支持版本 12.8(nvidia-smi) GPU服务器: Ubuntu 20.04 anaconda Python 版本为 3.11.7 CUDA 驱动最高支持版本 12.4 两者存在很多差异,为了尽量保持本地和服务器的版本一致,选择使用 Python 3.12.x,CUDA 12.4。 说明: 指定 Python 版本是 conda 相比于 venv 的一大优势,另一个优势是 conda 包不局限于 Python。 很多库并不支持这么高版本的 Python,到时候再说,反正版本问题是避免不了的。 常用包记录一些常用的包 12345678# 必备conda install numpy scipy pandas matplotlib seaborn scikit-learn sympy jupyter# 支持impor...
一些有趣的话
知识交流是学习的增长点,情感交流是社交的增长点。 Whenever you feel like criticizing any one, just remember that all the people in this world haven’t had the advantages that you’ve had. (The Great Gatsby) 当你想要批评别人的时候,你要记住,不是每个人都拥有你那么优越的条件。(了不起的盖茨比) 我一直在思考,一个人的一生怎么能一事无成呢,事实就是这么悲哀,不是所有人都能功成名就,我们中有些人注定要在日常生活的点滴中寻找生命的意义。(生活大爆炸) 寒夜读书忘却眠,锦衾香尽炉无烟。美人含怒夺灯去,问郎知是几更天。 吹灭读书灯,一身都是月。 此时情绪此时天,无事小神仙。 不如意事常八九,可与语人无二三。 且将新火试新茶,诗酒趁年华。 Everything happens for you, not to you. Pain is inevitable but suffering is optional. If peop...
Git submodule 学习笔记
简单记录一下 git submodule 的用法,注意不是 subtree。 添加子模块可以使用 submodule 功能添加子模块仓库 1git submodule add <子模块仓库的url> 默认会在主仓库下创建一个与子模块仓库同名的文件夹,用于存储子模块的所有内容。也可以指定子模块使用的文件夹 1git submodule add <子模块仓库的url> subdir 此时在本地仓库中会将新建的子模块和对 .gitsubmodules(记录子模块信息,包括最重要的子模块提交版本)的新建或修改添加到暂存区,需要正式提交。 子模块所使用的仓库url最好是公开可访问的,并且最好没有修改推送权限,只能单向接受远程更新的推送,这样最省事。 克隆含子模块的仓库在克隆一个含有子模块的 git 仓库时,默认对主仓库的 git clone 命令不会把子模块也拉取下拉,只会得到一个包含子模块信息的 .gitsubmodules 文件和子模块对应的空目录,这是考虑到实际用途中某些子模块可能是可选项而非必选项。 可以在主仓库中使用下面的命令进行子模块的初始化和更...
