python基础


检查python是否安装和版本,部分系统可能需要使用python3 --version
python3 --version #最新版可能变成了py --version
pip3 --version

创建虚拟环境

python3 -m venv venv //创建一个虚拟环境指定名字
./venv/Scripts/activate //windows 上激活虚拟环境
//windows如果遇到禁止运行脚本错误,管理员运行shell使用Set-ExecutionPolicy RemoteSigned

sudo apt install -y python3-venv linux安装虚拟环境
source venv/bin/activate //在linux和macos上激活当前虚拟环境

.env中设置环境变量PYTHONPATH=./,可让vscode识别当前环境

deactivate 退出虚拟环境
sudo chown -R $USER:$USER venv/ 修复目录环境权限(否则会提示没有写入权限,不能用sudo,使用sudo会跳出虚拟环境)

使用虚拟环境后win环境下使用pip安装而不要使用pip3

uv pip freeze > requirements.txt 生成依赖文件

uv pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ 根据依赖文件安装依赖
--proxy http://127.0.0.1:7897 使用代理

vscode选择环境

如果系统未自动选择项目中的虚拟环境

  • Ctrl+Shift+P 打开命令面板。
  • 输入并选择 Python: Select Interpreter
  • 在列表中选择你的虚拟环境解释器

计算程序运行花了多少秒

#插入一个时间登记
date_start = time.process_time()

#插入一个结束时间登记
end_date = time.process_time()

#输出总用时时间
print(f'总用时:{end_date - date_start}秒')

安装依赖包

pip install -i https://pypi.douban.com/simple/ gevent

跳过已安装的依赖

pip install --exists-action=i -r requirements.txt

卸载库

pip3 uninstall crypto
#删除指定库以外的所有库
pip uninstall -y $(pip freeze | grep -v "要保留的库名称" | cut -d= -f1)

查看第三方库

pip3 list

版本管理

安装依赖

shell
sudo apt install -y \
build-essential \
libbz2-dev \
libreadline-dev \
libssl-dev \
libffi-dev \
libncurses-dev \
zlib1g-dev \
libsqlite3-dev \
liblzma-dev \
libgdbm-dev \
uuid-dev \
tk-dev \
curl

curl -fsSL https://pyenv.run | bash
让pyenv命令生效

shell
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc
exec "$SHELL"

pyenv install -l 列出所有版本
pyenv install 3.12.9 安装python版本,默认版本一般是3.10.12
pyenv global 3.12.9 设置全局python版本

pyenv virtualenv 3.12.9 name 创建指定版本的虚拟环境
pyenv activate name 激活虚拟环境
pyenv virtualenvs 列出所有虚拟环境

创建系统启动文件的写法

ini
[Unit]
Description=test
After=network.target

[Service]
User=username
Group=username
WorkingDirectory=/path/to/your_project
ExecStart=$HOME/.pyenv/versions/3.12.9/envs/venv_name/bin/python /path/to/your_script.py
Restart=always

[Install]
WantedBy=multi-user.target

rm -rf $(pyenv root) 卸载pyenv

init.py

只要访问到改目录下的内容就会先执行该文件,并且在这个文件中导入的对象或可访问的对象,都被认为在这个目录中的对象,而引用这个目录对象,即可访问它的子对象

生成标准时间格式

datetime.now().strftime("%Y-%m-%d %H:%M:%S")

循环

python
while True: #无限循环
break  #跳出循环
continue  #跳出本次循环,就是不再执行本次循环下面的代码

文件操作

python
#创建文件s
with open(f"info/1.txt", 'w',encoding='utf-8') as file:
        file.write(nr) 

#创建文件夹
os.makedirs(f"mulu/{shangpin_id}", exist_ok=True)

带颜色输出

python
print("\033[91m这是高亮红色文本\033[0m")
print("\033[92m这是高亮绿色文本\033[0m")
print("\033[94m这是高亮蓝色文本\033[0m")

错误排除

出现:subprocess.CalledProcessError: Command 'lsb_release -a' returned non-zero exit status 1. 错误可以删除:

sudo mv /usr/bin/lsb_release /usr/bin/lsb_release_back

如果环境无法识别到python,并确认已添加用户环境

设置》应用》高级应用设置》应用执行别名,取消python的别名

或者执行:
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "Machine")

注释加TODO

表示待写的功能

定义函数

指定返回值类型

python
def fun(dingdan,jine)-> tuple[str, int]:  #返回字符串和整数

from typing import Optional, Tuple
def my_function() -> Tuple[Optional[str], Optional[int]]:
#返回字符串和整数,但是允许None空值

def example_function(var1: str, var2: int):
#指定传入参数类型

#结束程序:exit()

字符串拼接

python
text = "sdfsdf-sdfsdfsdf-sdfsdfsfd-dfsdfsdf"
texts = text.split('-') #分割字符串
texts = text.strip() #去首尾空格换行
texts = text.replace(" ", "").replace("\n", "") #去掉所有空格和换行符

小数点精确计算

需要注意的是不可直接将整数或

python
from decimal import Decimal,getcontext

#设置精确值
getcontext().prec = 20

a = 0.075681714405987

b = 0.122560714405987

c =  Decimal(str(b)) - Decimal(str(a))

# 付款金额应是0.046879
print(c)

类型检查

pip install mypy
然后运行
mypy crowdpulse/celery_ser/celery_app.py

导出项目移除所有__pycache__缓存脚本

第一个变量是路径,必须使用ANSI编码保存脚本

ps1
# 指定导出项目的路径
$Root = 'C:\Users\lee\Desktop\新建文件夹'
# 递归枚举根目录下所有名为“__pycache__”的文件夹(-Directory仅返回目录,-LiteralPath按字面量处理路径避免通配符,-Recurse递归子目录,-Filter在提供者层面过滤提高性能
Get-ChildItem -LiteralPath $Root -Directory -Recurse -Filter "__pycache__" |
  # 按完整路径长度降序排序(先处理更深层的目录,避免“目录非空”导致的删除报错;$_ 代表当前管道对象)
  Sort-Object { $_.FullName.Length } -Descending |
  # 删除这些目录(-Recurse递归删子项;-Force强制删除含只读/隐藏项;-ErrorAction Continue遇错继续;-Verbose输出详细过程)
  Remove-Item -Recurse -Force -ErrorAction Continue -Verbose

# 额外删除某个文件夹,如果只是删除缓存,下面的代码不需要
$TargetDir = Join-Path -Path $Root -ChildPath 'crowdpulse\platform_adapters'
# 检查目录是否存在,如果存在则删除
if (Test-Path -LiteralPath $TargetDir) {
    Remove-Item -LiteralPath $TargetDir -Recurse -Force -ErrorAction Continue -Verbose
} else {
    Write-Host "目录不存在,跳过删除: $TargetDir"
}
Write-Host "指定目录清理完成。" -ForegroundColor Green