检查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
版本管理
安装依赖
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命令生效
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 列出所有虚拟环境
创建系统启动文件的写法
[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")
循环
while True: #无限循环
break #跳出循环
continue #跳出本次循环,就是不再执行本次循环下面的代码
文件操作
#创建文件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)
带颜色输出
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
表示待写的功能
定义函数
指定返回值类型
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()
字符串拼接
text = "sdfsdf-sdfsdfsdf-sdfsdfsfd-dfsdfsdf"
texts = text.split('-') #分割字符串
texts = text.strip() #去首尾空格换行
texts = text.replace(" ", "").replace("\n", "") #去掉所有空格和换行符
小数点精确计算
需要注意的是不可直接将整数或
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编码保存脚本
# 指定导出项目的路径
$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