python环境配置与相关工具

venv

现在你如果直接执行命令

pip3 install crowsay

会报一个错误

image

原因是全局安装包,安装多了会产生冲突。所以官方推荐为每个项目建立一个虚拟环境:

mkdir project
cd project
python3 -m venv venv
source venv/bin/activate

建立完虚拟环境后,该项目的第三方包都会存到venv目录中。

venv实现的是多个项目第三方包的隔离,每个虚拟环境的python都是同一个版本。如果想在不同版本的python环境中切换,可以使用anaconda。

pipx

venv最大的问题在于,要经常source切换虚拟环境。烦都烦死了。全局安装第三方包,又会产生冲突,怎么办?

使用pipx install命令安装,它是全局安装。但是每会为每一个包都建立一个虚拟环境。这样既可以全局安装,又不怕冲突了。

调试工具pdb

命令 作用
b 设置断点
c 继续执行程序
l 查看当前行的代码段
s 进入函数
r 执行代码直到从当前函数返回
q 中止并退出
n 执行下一行
enter 重复执行上一条命令

使用方法

只要在想要调试的时候加入,代码运行到这里就会暂停

pdb.set_trace()

image

然后可以输入变量,查看此刻变量的值
image

输入c+enter,程序会继续执行直到遇到下一个断点
image

输入q+enter退出

使用日志进行调试

python中的日志模块logging也经常用作调试,logging分为5个级别

级别 使用情形
DEBUG 详细的信息,在追踪问题的时候使用
INFO 正常的信息
WARNING 一些不可预见的问题发生,或者将要发生,如磁盘空间低等,但不影响程序的运行
ERROR 由于某些严重的问题,程序中的一些功能受到影响
CRITICAL 严重的错误,或者程序本身不能够继续运行

使用方法

import logging

LOG1 = logging.getLogger('b.c')
LOG2 = logging.getLogger('d.e')
filehandler = logging.FileHandler('test.log', 'a')
formatter = logging.Formatter('%(name)s %(asctime)s %(levelname)s %(message)s')
filehandler.setFormatter(formatter)
filter = logging.Filter('b')
filehandler.addFilter(filter)
LOG1.addHandler(filehandler)
LOG2.addHandler(filehandler)
LOG1.setLevel(logging.INFO)
LOG2.setLevel(logging.DEBUG)
LOG1.debug('it is a debug info for log1')
LOG1.info('normal infor for log1')
LOG1.warning('warning info for log1:b.c')
LOG1.error('error info for log1:abcd')
LOG1.critical('critical info for log1:not worked')
LOG2.debug('debug info for log2')
LOG2.info('normal info for log2')
LOG2.warning('warning info for log2')
LOG2.error('error:b.c')
LOG2.critical('critical')

posted @ 2025/02/12 09:20:39