Environment

安装 Python 包 你的 Python 包都装到哪了? 假设当前 Python 解释器的路径是 $path_prefix/bin/python,那么你启动 Python 交互环境或者用这个解释器运行脚本时,会默认寻找以下位置 $path_prefix/lib(标准库路径) $path_prefix/lib/pythonX.Y/site-packages(三方库路径,X.Y 是对应 Python 的主次版本号,如 3.7, 2.6) 当前工作目录(pwd命令的返回结果) 几个有用的函数 sys.executable:当前使用的 Python 解释器路径 sys.path:当前包的搜索路径列表 sys.prefix:当前使用的 $path_prefix 除此之外,还在以在命令行中运行 python -m site,会打印出当前 Python 的一些信息,包括搜索路径列表。 使用环境变量添加搜索路径 如果你的包的路径不存在上面列出的搜索路径列表里,可以把路径加到 PYTHONPATH 环境变量里 虚拟环境 虚拟环境就是为了隔离不同项目的依赖包,使他们安装到不同的路径下,以防止依赖冲突的问题。理解了 Python 是如何安装包的机制之后就不难理解虚拟环境(virtualenv, venv模块)的原理。其实,运行virtualenv myenv会复制一个新的 Python 解释器到myenv/bin下,并创建好myenv/lib,myenv/lib/pythonX.Y/site-packages等目录(venv模块不是用的复制,但结果基本一样)。执行source myenv/bin/activate以后会把myenv/bin塞到PATH前面,让这个复制出来的 Python 解释器最优先被搜索到。这样,后续安装包时,$path_prefix就会是myenv了,从而实现了安装路径的隔离。 运行 Python 脚本 运行一个子目录中某脚本的代码,应该用 python -m <module_name>。python -m 后面的参数是(以 . 分隔的)模块名,而不是路径名。 pip 运行 pip 有两种方式: pip ... python -m pip ... 第一种方式和第二种方式大同小异,区别是第一种方式使用的 Python 解释器是写在 pip 文件的 shebang 里的,一般情况下,如果你的 pip 路径是 $path_prefix/bin/pip,那么 Python 路径对应的就是 $path_prefix/bin/python。如果你用的是 Unix 系统则 cat $(which pip) 第一行就包含了 Python 解释器的路径。第二种方式则显式地指定了 Python 的位置。 ...

January 1, 2000

Git

Git 配置 git config --global user.name "your_username" git config --global user.email "your_email" # 查看所有配置 git config -l 初始化 # 初始化指定目录 git init git-demo # 初始化当前目录 git init 查看状态 git status git status -s # 简化版 # short format # ?? file # 文件未追踪 # A file # 文件已添加 # M file # 文件被修改 # M file # 文件被修改且已加入暂存区 标识 SHA1标识:f1dfde5930bb26b7e94738481aca2bad6fc74b39 可以使用缩写,只写前4+位 HEAD引用:指向当前分支的最新修订 HEAD^n:当HEAD或标识存在分支合并时,指向第n个父修订 HEAD~m:指向第m个祖先修订 HEAD^n~m:指向第n个父修订的第m个祖先修订 HEAD@{k}:指向倒数第k个历史操作指向的修订 分支引用:指向所指分支的最后一个修订 查看历史记录 查看提交记录 git log git log --graph git --no-pager log # 输出到stdout git log --oneline # 一行展示 # 查看最近3条记录,-3表示输出不查过3行 git log HEAD -3 # 查看离 e85fe7 最近3条记录 git log e85fe7 -3 # 单行显示 git log --abbrev-commit --pretty=oneline # 只显示提交备注 git log --pretty=format:'%s' # 配置alias git config --global alias.hist 'log --pretty=format:"%h %ad | %s%d [%an]" --date=short' git hist git config --global alias.graph 'log --graph' git graph git config --global alias.mist 'log --pretty=format:"%s"' git mist 查看提交 # 查看 e85fe7 的修订记录 git show e85fe7 # 查看倒数第2次记录 # HEAD: 当前修订,等于HEAD~0 # HEAD~1: 前一个修订 # HEAD~2: 前两个修订 git show HEAD~2 查看文件差异 # ckeck difference git diff git diff --name-only # 只显示文件名 git diff --stat # 显示统计信息 # 查看倒数第二次修订和当前修订中,file1文件的差异 git diff HEAD~1 HEAD file1 difftool 在 ~/.gitconfig 中写入一下配置 ...

January 1, 2000

Go Cookbook

References How to Write Go Code Effective Go Awesome Go Install 下载安装 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz 添加环境变量 export GOPATH=/data/username/go # 修改 GOPATH,默认是 $HOME/go export GO111MODULE=on # 默认开启 go module export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin # 添加环境变量 查看环境变量 go env Go Modules 开启go modules go env -w GO111MODULE="auto" # 如果无法访问proxy.golang.org,需要修改proxy go env -w GOPROXY=https://goproxy.cn,direct # 公司proxy:https://goproxy.woa.com export GOPROXY="https://yizhenchen:vm4UIuF1@goproxy.woa.com,direct" export GOPRIVATE="" export GOSUMDB="sum.woa.com+643d7a06+Ac5f5VOC4N8NUXdmhbm8pZSXIWfhek5JSmWdWrq7pLX4" export no_proxy=$no_proxy",goproxy.woa.com" 使用 # 初始化包 go mod init example/user/hello # build and install go install example/user/hello # 自动检测依赖包 go mod tidy 配置境内源 ...

January 1, 2000

Go Language

Code Reference gotemplate.go: package main import ( "fmt" ) const c = "C" var v int = 5 type T struct{} func init() { // initialization of package } func main() { var a int Func1() // ... fmt.Println(a) } func (t T) Method1() { // ... } func Func1() { // exported function Func1 // ... } 变量与常量 Assignment // declare and init var s1 string = "hello" var s2 = "world" // 简写,有初始值时可省略类型 s3 := "hello world" // 简写 var i1, i2 int = 1, 2 // 同时声明多个变量 var i3, s4 = 1, "2" // 有初始值时可省略类型 var i4 = 4 i5 := 5 // := 结构不能在函数外使用 // declare without initiation var s0 string // s0 = "" var i0 int // i0 = 0 var b0 bool // b0 = false Constants const s string = "constant" const n = 500000000 // 数值常量可以是任意精度,没有类型 const d = 3e20 / n // 常量不能用 := 语法声明 Enum 常量还可以用作枚举: ...

January 1, 2000

Go Packages

Utils godetenv Github - godotenv Go 每日一库 - godotenv 读取同目录下 .env 文件 name=Tom age=18 example import "github.com/joho/godotenv" func main() { err := godotenv.Load() if err != nil { log.Fatal(err) } fmt.Println("name: ", os.Getenv("name")) fmt.Println("age: ", os.Getenv("age")) } // 也可以加载其他文件 // 如果多个文件出现同一个 key,先出现的优先后出现的不生效 godotenv.Load("common", "dev.env") 也可以加载 YAML 文件 name: awesome web version: 0.0.1 # os.Getenv("name") 一般有多个环境文件:.env.dev、.env.test、env.production,可以用以下代码切换 env := os.Getenv("APP_ENV") if env == "" { env = "dev" } err := godotenv.Load(".env." + env) if err != nil { log.Fatal(err) } err = godotenv.Load() if err != nil { log.Fatal(err) } fmt.Println("name: ", os.Getenv("name")) fmt.Println("version: ", os.Getenv("version")) fmt.Println("database: ", os.Getenv("database")) CLI flag 用于解析命令行参数 ...

January 1, 2000

Go Standard Lib

fmt Format specifiers: %t: boolean %c: character %U: unicode code point %s: strings or []bytes %q: quoted string %#q: quoted string with backquotes %b: bit representation %d: integers (base 10) %o: octal (base 8) notation %x/%X: hexadecimal (base 16) notation %f: floats %g: complex %e: scientific notation %p: pointers (hexadecimal address with prefix 0x) %v: default format, when String() exists, this is used. %+v: gives a complete output of the instance with its fields %#v: gives us a complete output of the instance with its fields and qualified type name %T gives us the complete type specification %%: if you want to print a literal % sign type user struct { name string } func main() { u := user{"tang"} //Printf 格式化输出 fmt.Printf("%+v\n", u) //格式化输出结构 fmt.Printf("%#v\n", u) //输出值的 Go 语言表示方法 fmt.Printf("%T\n", u) //输出值的类型的 Go 语言表示 fmt.Printf("%t\n", true) //输出值的 true 或 false fmt.Printf("%b\n", 1024) //二进制表示 fmt.Printf("%c\n", 11111111) //数值对应的 Unicode 编码字符 fmt.Printf("%d\n", 10) //十进制表示 fmt.Printf("%o\n", 8) //八进制表示 fmt.Printf("%q\n", 22) //转化为十六进制并附上单引号 fmt.Printf("%x\n", 1223) //十六进制表示,用a-f表示 fmt.Printf("%X\n", 1223) //十六进制表示,用A-F表示 fmt.Printf("%U\n", 1233) //Unicode表示 fmt.Printf("%b\n", 12.34) //无小数部分,两位指数的科学计数法6946802425218990p-49 fmt.Printf("%e\n", 12.345) //科学计数法,e表示 fmt.Printf("%E\n", 12.34455) //科学计数法,E表示 fmt.Printf("%f\n", 12.3456) //有小数部分,无指数部分 fmt.Printf("%g\n", 12.3456) //根据实际情况采用%e或%f输出 fmt.Printf("%G\n", 12.3456) //根据实际情况采用%E或%f输出 fmt.Printf("%s\n", "wqdew") //直接输出字符串或者[]byte fmt.Printf("%q\n", "dedede") //双引号括起来的字符串 fmt.Printf("%x\n", "abczxc") //每个字节用两字节十六进制表示,a-f表示 fmt.Printf("%X\n", "asdzxc") //每个字节用两字节十六进制表示,A-F表示 fmt.Printf("%p\n", 0x123) //0x开头的十六进制数表示 } io studygolang - io — 基本的 IO 接口 ...

January 1, 2000

Graph

Libraries DGL (Deep Graph Library) References Overview of DGL Pytorch Geometric Documentation Networkx # import import networkx as nx # load adjacency matrix G = nx.from_numpy_matrix(A) # get adjacency matrix A = nx.adjacency_matrix(G) A = nx.adjacency_matrix(G).todense() # drawing fig = plt.figure(figsize=(10,8)) ax = plt.subplot(111) pos = nx.spring_layout(G) #pos = nx.kamada_kawai_layout(G) nx.draw(G, ax=ax, pos=pos, node_size=10, node_color=colors, alpha=0.5, with_labels=True) # or nx.draw_networkx_nodes(G, ax=ax, pos=pos, node_size=100, node_color=colors, alpha=0.5) nx.draw_networkx_edges(G, ax=ax, pos=pos, alpha=0.1) # Laplacian Matrix lap = nx.linalg.laplacianmatrix.laplacian_matrix(G) lap = nx.linalg.laplacianmatrix.normalized_laplacian_matrix(G) # N=D^(-1/2)LD^(-1/2) # connected components nx.algorithms.components.number_connected_components(G) # relabel G = nx.relabel_nodes(G, lambda x: int(x[1:])) # get weights for n, nbrs in G.adj.items(): for nbr, eattr in nbrs.items(): wt = eattr['weight'] print('(%d, %d, %.3f)' % (n, nbr, wt)) for (u, v, wt) in G.edges.data('weight'): print('(%d, %d, %.3f)' % (u, v, wt)) # shorest path nx.shorest_paht(G, source, target) nx.shorest_paht_length(G, source, target) Projects deepwalk node2vec GraphEmbedding GraphSAGE graphsage-simple karateclub SINE Overlapping Community Detection with Graph Neural Networks

January 1, 2000

Hadoop

Install find installed Hadoop env | grep -i hadoop echo $HADOOP_HOME echo $HADOOP_CLASSPATH Hadoop directory structure: hadoop-3.2.1-1.3.2 ├── bin # hadoop的可执行文件,包括 hadoop, hdfs, yarn 等 │ ├── container-executor │ ├── hadoop │ ├── hdfs │ ├── mapred │ ├── oom-listener │ └── yarn ├── etc # hadoop的配置文件 │ └── hadoop │ ├── core-site.xml │ ├── hdfs-site.xml │ ├── httpfs-site.xml │ ├── kms-site.xml │ ├── log4j.properties │ ├── mapred-site.xml │ ├── workers │ └── yarn-site.xml ├── sbin # hadoop的启动脚本 │ ├── hadoop-daemon.sh │ ├── hadoop-daemons.sh │ ├── httpfs.sh │ ├── kms.sh │ ├── mr-jobhistory-daemon.sh │ ├── refresh-namenodes.sh │ ├── start-all.sh │ ├── start-balancer.sh │ ├── start-dfs.sh │ ├── start-secure-dns.sh │ ├── start-yarn.sh │ ├── stop-all.sh │ ├── stop-balancer.sh │ ├── stop-dfs.sh │ ├── stop-secure-dns.sh │ ├── stop-yarn.sh │ ├── workers.sh │ ├── yarn-daemon.sh │ └── yarn-daemons.sh └── share/ # hadoop的共享 jar 文件 └── hadoop ├── client ├── common ├── hdfs ├── mapreduce ├── tools └── yarn Commands Hadoop Commands Guide ...

January 1, 2000

Hive

Deploy Deploy Standalone Metastore with Docker Hive - Quick Start HIVE_VERSION=3.1.3 MYSQL_HOST="localhost" MYSQL_PORT="3306" MYSQL_USER="hive" MYSQL_PASSWORD="password" MYSQL_DATABASE="hive_metastore" docker run -d -p 9083:9083 --env SERVICE_NAME=metastore --env DB_DRIVER=mysql \ --env SERVICE_OPTS="-Djavax.jdo.option.ConnectionDriverName=com.mysql.cj.jdbc.Driver -Djavax.jdo.option.ConnectionURL=jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE} -Djavax.jdo.option.ConnectionUserName=${MYSQL_USER} -Djavax.jdo.option.ConnectionPassword=${MYSQL_PASSWORD}" \ -v $(pwd)/warehouse:/opt/hive/data/warehouse \ -v $(pwd)/lib/mysql-connector-java-8.0.30.jar:/opt/hive/lib/mysql-connector-java.jar \ --name hive-metastore apache/hive:${HIVE_VERSION} Deploy Standalone Metastore download hive tar: https://dlcdn.apache.org/hive/ extract tar, add HIVE_HOME to environment variables echo 'export HIVE_HOME=/opt/hive' >> ~/.bashrc echo 'export PATH=$HIVE_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc create database CREATE DATABASE hive_metastore; CREATE USER 'hive'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hive'@'%'; FLUSH PRIVILEGES; download mysql connector jar: https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar mv mysql-connector-java-8.0.30.jar $HIVE_HOME/lib/ 修改 hive-site.xml <configuration> <!-- 元数据存储位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!-- MySQL连接配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> <!-- 远程模式配置 --> <property> <name>hive.metastore.uris</name> <value>thrift://0.0.0.0:9083</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> </configuration> 启动 metastore $HIVE_HOME/bin/schematool -dbType mysql -initSchema $HIVE_HOME/bin/hive --service metastore check metastore is running jps lsof -i :9083 CLI # 启动cli hive # or hive --service cli # 定义变量 hive --define A=B # or hive -d A=B # 执行SQL语句 hive -e SELECT * FROM a_table # 运行文件 hive -f filename # or hive > source filename; # 运行初始化文件 # 可以将初始化内容加到$HOME/.hiverc文件中 hive -i filename # 历史记录保存在$HOME/.hivehistory文件中 # 配置文件在$HIVE_HOME/conf/hive-default.xml.template # 配置 hive --hiveconf option_A=true hive set hiveconf:option_A=trues; # 执行jar应用 hive --service jar # 执行shell命令,前面加! hive > !pwd; # 执行hadoop命令,去掉前面的hadoop hive > fs -ls /; # 注释 # -- 注释内容前面加'--' Database操作 # 查看database列表 SHOW DATABASES; # 创建database CREATE DATABASE a_database; # 查看信息 DESCRIBE DATABASE a_database; # 使用database USE a_database; # 删除database DROP a_database; # 修改属性 ALTER DATABASE a_database SET DBPROPERTIES('edited-by' = 'ychen'); Table操作 # 查看table列表 SHOW TABLES; SHOW TABLES IN a_database; # 查看表信息 DESCRIBE a_table; DESCRIBE a_database.a_table; DESCRIBE a_table.a_column; # 查看某一列 # 创建表 CREATE TABLE IF NOT EXISTS a_table ( name STRING COMMENT 'the name', salary FLOAT COMENT 'the salary' ) COMMENT 'Description of the table' TBLPROPERTIES ('creator'='me') LOCATION '/user/hive/warehouse/a_database/a_table'; # 删除表 DROP TABLE IF EXISTS a_table; # 重命名表 ALTER TABLE a_table RENAME TO b_table; # 修改列 ALTER TABLE a_table CHANGE COLUMN old_column new_column INT # 重命名列 AFTER other_column; # 修改位置 # 增加列 ALTER TABLE a_table ADD COLUMNS ( app_name STRING session_id LONG ) # 删除与替换列 ALTER TABLE a_table REPLACE COLUMNS ( a_column INT, b_column STRING ) 外部表 Hive没有所有权的数据,但是可以进行查询 ...

January 1, 2000

HTML

HTML Basic Template <!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>This is a Heading</h1> <p>This is a paragraph.</p> </body> </html>

January 1, 2000