# ===== CodeLab: Python 模块与 pip 包管理 =====
# 来源: https://aoerliang.dpdns.org/articles/python-modules
# 以下代码片段按文章出现顺序拼接, 共 6 段

# ----- 片段 1 (python) -----
import math                     # 方式1:导入整个模块
print(math.sqrt(16))

from datetime import datetime   # 方式2:导入具体名字
print(datetime.now().strftime("%Y-%m-%d"))

from collections import Counter as C   # 方式3:起别名
print(C("hello"))

import os, sys                  # 方式4:一次导入多个

# ----- 片段 2 (python) -----
# 文件:utils.py
def add(a, b):
    """两数相加"""
    return a + b

def multiply(a, b):
    return a * b

if __name__ == "__main__":
    print(add(2, 3))
    print(multiply(2, 3))

# ----- 片段 3 (python) -----
# 文件:main.py(与 utils.py 同目录)
import utils
print(utils.add(10, 5))
print(utils.multiply(3, 4))

# ----- 片段 4 (bash) -----
# 安装包
pip install requests

# 指定版本安装
pip install requests==2.32.3

# 查看已安装
pip list

# 查看某个包的信息
pip show requests

# 卸载
pip uninstall requests

# ----- 片段 5 (bash) -----
# 创建虚拟环境
python3 -m venv myenv

# 激活(Windows)
myenv\Scripts\activate
# 激活(Linux / macOS)
source myenv/bin/activate

# 把项目依赖导出/还原
pip freeze > requirements.txt
pip install -r requirements.txt

# ----- 片段 6 (python) -----
import requests

resp = requests.get("https://api.github.com", timeout=5)
print(resp.status_code)
data = resp.json()
print(data.get("current_user_url"))

# 带查询参数和请求头
params = {"q": "python", "per_page": 3}
headers = {"User-Agent": "CodeLab"}
r = requests.get("https://api.github.com/search/repositories",
                 params=params, headers=headers, timeout=10)
print([item["full_name"] for item in r.json().get("items", [])])
