当前位置: 首页 > article >正文

优雅的开始一个Python项目

优雅的开始一个Python项目

这是我在初始化一个Python项目时,一键生成的项目文件。它自动完成了git初始化、环境管理、日志模块这三件事情,并在最后进入了虚拟环境。
请添加图片描述

uv安装

uv是一个现代的Python包管理和项目管理工具。uv中文文档
安装uv:

# unix:
curl -LsSf https://astral.sh/uv/install.sh | sh

# windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

自动初始化脚本

有了uv,可以方便的初始化一个项目。将以下代码写在sh文件中,

# InitializeANewPythonProject.sh 适用于Linux/MacOS

mkdir $1 # 创建项目目录
cd $1
uv init  # uv初始化项目
mkdir config  # 用于存放配置文件
touch config/.env  # 用于管理环境变量,可以用dotenv模块方便的使用
touch config/config.toml  # 用于管理项目配置
echo "*.env" >> .gitignore  # 一般会把.env忽略,可选

# 创建全局日志管理器,其他模块可以直接引用
mkdir utils
touch utils/Logger.py 
[ -n "$(tail -c 1 utils/Logger.py)" ] && echo >> utils/Logger.py
cat << 'EOF' >> utils/Logger.py
import logging
from logging.handlers import RotatingFileHandler

def setup_global_logger():
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # 设置全局最低级别
    formatter = logging.Formatter(
        '[%(asctime)s] [%(levelname)s] %(name)s:%(lineno)d - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    file_handler = RotatingFileHandler(
        'main.log', maxBytes=10 * 1024 * 1024, backupCount=5, encoding='utf-8'
    )
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(formatter)
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    console_handler.setFormatter(formatter)
    if logger.hasHandlers():
        logger.handlers.clear()
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    return logger
EOF
sed -i '1i\from utils.Logger import setup_global_logger\nsetup_global_logger()' main.py

# 配置Python环境
uv venv
source .venv/bin/activate  # 激活环境

运行脚本

脚本接收一个路径。这个目录不需要你手动去创建,它会自动新建目录的。

bash InitializeANewPythonProject.sh /home/NewFolder

然后添加Python库时可以使用pip,但更好的方式是:

uv add <package-name>

http://www.kler.cn/a/612217.html

相关文章:

  • C++ :顺序容器
  • Causality Based Front-door Defense AgainstBackdoor Attack on Language Models
  • 智能制造:自动化焊装线的数字化设计
  • Axios企业级封装实战:从拦截器到安全策略!!!
  • 基于HTML的邮件发送状态查询界面设计示例
  • 8路CXP相机采集系统介绍
  • 华为GaussDB数据库的手动备份与还原操作介绍
  • C++List模拟实现|细节|难点|易错点|全面解析|类型转换|
  • ngx_http_index_t
  • Java 大视界 -- Java 大数据在智能政务公共服务资源优化配置中的应用(118)
  • 如何用 Postman 正确传递 Date 类型参数,避免服务器解析错误?
  • 什么是泛目录站群?怎么做好无极泛目录站群
  • Scala总结(一)
  • [计算机网络]网络I/O模型
  • Qt在模块依靠情况下资源文件名称和资源名称的使用限制
  • HTML 与 JavaScript 交互:学习进程中的新跨越(一)
  • 2025选择手机之我见
  • 抽象工厂设计模式及应用案例
  • 【MySQL】MySQL结构体系及核心组件功能是怎样的?
  • stm32week8