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

优雅的开始一个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.dtcms.com/a/95346.html

相关文章:

  • Windows 我的世界 Minecraft 服务器搭建,Fabric 模组搭建教程(内网穿透)
  • 2025年渗透测试面试题总结-某快手-安全工程师(题目+回答)
  • 【Git 暂存操作与升级应用指南】
  • 华为GaussDB数据库的手动备份与还原操作介绍
  • 将 Markdown 表格结构转换为Excel 文件
  • ETCD --- ​租约(Lease)​详解
  • ICRA-2025 | 从人类视角到机器人视角的具身导航!连续环境中基于地面视角的视觉语言导航
  • 基于核选择融合注意力机制TCN-MTLATTENTION-MAMBA模型(Python\matlab代码)
  • Spring Framework启动机制深度解析
  • 大模型重点5【Agent构建】
  • 华为hcia——Datacom实验指南——配置IPv4静态路由,默认路由和浮动静态路由
  • java开发环境本地全套
  • 从vue2过渡到vue3
  • 2025年成都市双流区农业科技试验示范基地建设方案申报条件材料和补贴程序、时间安排
  • CTF类题目复现总结-[MRCTF2020]不眠之夜 1
  • CMake 构建的Qt 项目中的构建套件的配置
  • OpenCV图像拼接(4)构建图像的拉普拉斯金字塔 (Laplacian Pyramid)
  • 【蓝桥杯】单片机设计与开发,中断系统,外部中断(下)
  • 【Linux加餐-验证UDP:TCP】-windows作为client访问Linux
  • UDP视频传输中的丢包和播放花屏处理方法
  • 11:00开始面试,11:08就出来了,问的问题有点变态。。。
  • SpringBoot集成腾讯云OCR实现身份证识别
  • 企业网站源码HTML成品网站与网页代码模板指南
  • SpringBoot报错解决方案
  • win11+ubuntu双系统安装
  • selenium实现自动登录项目(5)
  • 自定义协议的网络计算器项目
  • 北斗导航 | 改进奇偶矢量法的接收机自主完好性监测算法原理,公式,应用,RAIM算法研究综述,matlab代码
  • element-plus中,Tour 漫游式引导组件的使用
  • 小程序中过滤苹果设备中的表情(即 emoji)