现在你如果直接执行命令
pip3 install crowsay
会报一个错误
原因是全局安装包,安装多了会产生冲突。所以官方推荐为每个项目建立一个虚拟环境:
mkdir project
cd project
python3 -m venv venv
source venv/bin/activate
建立完虚拟环境后,该项目的第三方包都会存到venv目录中。
venv实现的是多个项目第三方包的隔离,每个虚拟环境的python都是同一个版本。如果想在不同版本的python环境中切换,可以使用anaconda。
venv最大的问题在于,要经常source切换虚拟环境。烦都烦死了。全局安装第三方包,又会产生冲突,怎么办?
使用pipx install命令安装,它是全局安装。但是每会为每一个包都建立一个虚拟环境。这样既可以全局安装,又不怕冲突了。
命令 | 作用 |
---|---|
b | 设置断点 |
c | 继续执行程序 |
l | 查看当前行的代码段 |
s | 进入函数 |
r | 执行代码直到从当前函数返回 |
q | 中止并退出 |
n | 执行下一行 |
enter | 重复执行上一条命令 |
只要在想要调试的时候加入,代码运行到这里就会暂停
pdb.set_trace()
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')