conda

水蚺 (Anaconda) 蟒蛇 (Python)
常待在河流、沼泽等水域中。 生活在森林、草原或岩石地区。
更重更粗壮,适应水中的捕猎。 更长但较轻,灵活性更高。
卵胎生(卵在母体内孵化后直接产下幼蛇) 卵生(产卵,并在巢中孵化)

界門綱目科屬種:

動物界 Animalia、脊索動物門 Chordata、爬蟲綱 Reptilia、有鱗目 Squamata、蛇亞目 Serpentes、蚺科 Boidae 和蚺亞科 Boinae、水蚺屬 Eunectes
動物界 Animalia、脊索動物門 Chordata、爬蟲綱 Reptilia、有鱗目 Squamata、蛇亞目 Serpentes、蟒蛇科 Pythonidae 和蟒亞科 Pythoninae、蟒屬 Python

蚺是水裡最大的蛇,蟒是陸地最大的蛇,這讓我突然想到為什麼水生動物比陸地動物更大?最大陸生動物是10噸重7米長的非洲象,最大的水生動物是200噸重33米長的藍鯨。

也許是因為浮力拖舉著讓他們移動受地心引力限制更小,能長大就往大了長了。

人為什麼不能是現在體型的兩倍?如果是因為引力,大不了腿骨密度和肌肉(現在70%)相較於上肢佔比更高些?如果是因為能量,那人類群體少一半也是可以的,也許是因為人是用腦子改變自然適應自己的生物,多一個人比大一倍的自己要好一些吧。或許正是差的那些浮力提高了一部分動物的體型上限。

因為2021年剛買M1時conda還不適配湊合用的是pyenv & virtualenv & miniforge,其難用程度和其他庫的不兼容程度直接導致一直到2021年7月都放棄寫python(記得當時還嘗試過為某些庫編譯apple silicon版本)。後來在vivo和網易都用的high level infra,最後在商湯用的是clusters和每次創建都需要dockerfile新建的機器,或方便或不方便,總之一直沒怎麼用過conda,上次用conda可以追溯到2020年及之前的本科時代。

conda vs. pyenv & virtualenv

pyenv是python版本管理,virtualenv是與之配合的環境(主要是庫的版本,次要是python版本)管理,按理說是能做到跟conda一樣隔離python環境的效果。

pip是package manager,virtualenv是environment manager,conda也是二者之和。

所以conda=pyenv(python version manager) + pip(package manager) + virtualenv(environment manager)。

Task Conda Pip Virtualenv
Install a package conda install $PACKAGE_NAME pip install $PACKAGE_NAME X
Update a package conda update --name $ENVIRONMENT_NAME $PACKAGE_NAME pip install --upgrade $PACKAGE_NAME X
Update package manager conda update conda Linux/macOS: pip install -U pip
Win: python -m pip install -U pip
X
Uninstall a package conda remove --name $ENVIRONMENT_NAME $PACKAGE_NAME pip uninstall $PACKAGE_NAME X
Create an environment conda create --name $ENVIRONMENT_NAME python X pyenv virtualenv <python_version> <env_name>
Activate an environment conda activate $ENVIRONMENT_NAME X pyenv activate <env_name>
Deactivate an environment conda deactivate X pyenv deactivate
Search available packages conda search $SEARCH_TERM pip search $SEARCH_TERM X
Install package from specific source conda install --channel $URL $PACKAGE_NAME pip install --index-url $URL $PACKAGE_NAME X
List installed packages conda list --name $ENVIRONMENT_NAME pip list X
Create requirements file conda list --export pip freeze X
List all environments conda info --envs X pyenv virtualenvs or lsvirtualenv
Install other package manager conda install pip pip install conda X
Install Python conda install python=x.x X X
Update Python conda update python* X X
刪除虛擬環境 conda env remove --name <env_name> rm -rf <env_path> # Linux/macOS pyenv uninstall <env_name>

conda update python會把Python 2.x更新到最新的2.latest,把Python 3.x更新到3.latest。

Library vs. Package vs. Module

mylibrary/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
submodule1.py
  1. 一个library可能包含一个或多个包,也可能只包含一个模块。它的目的是提供某些功能,使开发者不必重新发明轮子。
  2. 一个package是包含__init__.py文件的目录,__init__.py文件使得这个目录被Python识别为一个包。
  3. module是Python代码的一个文件,通常以.py结尾。它可以包含变量、函数、类和可执行代码。模块是最小的代码单元,可以被单独导入使用。

mylibrary, NumPy, Matplotlib 这些都同时是库也是包,怎么叫都行。

# import 引入一个模块或包,通常是整个模块或包。
import math # 引入模块 math (C实现的数学库)
import numpy # 引入包 numpy
# from 从一个模块或包中引入特定的功能(如函数、类、变量都可以)。
from math import pi # 从模块 math 中引入变量 pi
from math import sqrt # 从模块 math 中引入函数 sqrt
from numpy import linalg # 从包 numpy 中引入子包 linalg

venv vs. virtualenv

venv是Python3内置的标准库,用法是python3 -m venv。
我2021年用的是pyenv里带的插件pyenv-virtualenv,不是标准库,用法就如上面的表格。

PyPI

PyPI是一個Python官方的包倉庫,直接pip install package就會搜索PyPI,官網把library/package又叫作project,除了可以從PyPI下載,還可以:

  1. 在本地pip install,
  2. 任意服務器pip install UR,
  3. 或者用git repo,
  4. 或者公有/私有鏡像pip install —index-url 或 -i,
  5. 或者conda倉庫conda install。

environment.yml和requirement.txt

dockerfile、makefile、environment.yml都是軟件(docker、make、conda)自定義的語法,用Go、C、PyYAML解析。

功能 environment.yml (用于 conda) requirements.txt (用于 pip)
定义 定义一个完整的 Conda 环境,包括 Python 版本、依赖包等 列出所有 Python 包及其版本
创建环境命令 conda env create -f environment.yml pip install -r requirements.txt
激活环境命令 conda activate myenv conda activate myenv 或者 python -m venv env (虚拟环境)
导出当前环境 conda env export > environment.yml pip freeze > requirements.txt
支持的包管理工具 condapip(通过 pip 部分) pip
支持 Python 包以外的依赖 可以列出任何类型的依赖(包括非 Python 包) 仅限 Python 包,无法列出非 Python 包
指定包的版本 - numpy=1.21.0 numpy==1.21.0
安装命令 conda env create -f environment.yml pip install -r requirements.txt
更新环境 conda env update -f environment.yml pip install --upgrade -r requirements.txt
删除环境 conda env remove -n myenv 見上面的表“刪除虛擬環境”
手动转换 可以手动从 requirements.txt 转换为 environment.yml 可以通过 conda list --export 转换为 requirements.txt

conda裡用pip:
默认通过 Conda 通道安装,支持通过 pip 安装包,都會安裝到當前環境的site-packages裡,pip只會安裝在當前環境裡,在yaml文件裡會在dependencies:裡多一個- pip:- xxx。

pip install -r requirements.txt就相當於把requirements.txt的內容展開按順序放在install之後,如果希望安裝PyPI之外的資源,類似conda env create -f environment.yml這樣指定channel的話,可以直接在pip install -r requirements.txt之後添加-i,或者把-i放進txt首行也行。

conda的channels:

  1. default通道就是官方倉庫
  2. conda-forge是最主要的第三方倉庫。
  3. conda config --show channels看配置了哪些channels。
  4. conda config --add channels conda-forge添加channel。
  5. conda config --set channel_priority strict可以指定搜索順序,比如把conda-forge設置在default之前獲取最新更新。

PyTorch

https://pytorch.org/get-started/locally/
pytorch pytorch-cpu pytorch-gpu pytorch-cuda真JB乱套,组里服务器是cuda12.4,最后我只留下了从上面链接里下的pytorch和pytorch-cuda。
等跑完導電就把這個打包新的environment.yml上傳到github,不然總亂套。

vscode ssh remote開發時跳轉函數定義

在服務器上沒法按著command跳轉到模塊裡,查了下想起來vscode的extensions需要在服務器上再裝一遍,裝完Python插件果然立刻就好了。
有些找不到位置無法訪問但是確實裝了的庫選對解釋器位置就好了(shift+command+p)。

24號回家的火車上再讀cosmos

The known is finite, the unknown infinite; intellectually we stand on an islet in the midst of an illimitable ocean of inexplicability. Our business in every generation is to reclaim a little more land, to add something to the extent and the solidity of our possessions. ——Thomas Huxley, 1887

Excerpt From Cosmos, Carl Sagen

看残酷天堂群有人说到退休储蓄pretax 401k match > > roth IRA > pretax/roth 401k > backdoor IRA > personal brokeage account,中国的从朱镕基开始的由社会保障体系取代单位负责退休金是怎样的机制?以前的单位负责分非货币化的房和退休金相比如今确实是两个世界。
浦東是朱鎔基被鄧小平提拔之前在上海跟江澤民共事時開發的。
學而不思欠擬合,思而不學過擬合。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×