Python 笔记
pip 无法更新库到最新版本
因为 Python 版本的限制造成, 安装新版本的 Python, pip 指令也和 Python 版本号相同 例如 Python 3.8 使用指令也为pip3.8 install openai
运行特定版本的 Python 的命令
python3.8 your_python_script.py
在这个示例中,在命令前添加 python3.8,以运行 Python 3.8 版本并执行一个 Python 脚本文件 your_python_script.py。
确认 Python 3.8 的安装位置
which python3.8
将flask项目部署到服务器
- 在服务器上安装Python和pip工具。可以使用以下命令安装:
sudo yum install python3
sudo yum install python3-pip
- 安装虚拟环境(virtualenv)来隔离不同应用程序之间的依赖关系。
sudo pip3 install virtualenv
- 创建并激活虚拟环境。
virtualenv venv
source venv/bin/activate
- 安装Flask框架及其所需的依赖项。
pip3 install Flask
pip3 install gunicorn
- 编写应用程序代码,并使用 Gunicorn 启动 Flask 应用程序:
gunicorn app:app --bind 0.0.0.0:8000
- 设置防火墙以允许流量通过选择的端口。
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
sudo firewall-cmd --reload
Python 对象序列化为 JSON 格式字符串乱码
import json
info = {"content": "错误"}
dumps = json.dumps(info, ensure_ascii=False)
print(dumps) # 输出 {"content": "错误"}
其中ensure_ascii=False
参数告诉json.dumps()
方法使用原生 Unicode 字符,而不是通过 ASCII 转义字符来表示非英文字符。因此,在上述示例代码中输出时就会直接显示中文字符,而不是出现类似于 \u9519\u8bef 的转义字符了。
永久配置阿里云镜像加速库
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
取消
pip config unset global.index-url
PIP 使用阿里源
pip install -i https://mirrors.aliyun.com/pypi/simple/ pycurl
官方源: https://pypi.org/simple 阿里云源: https://mirrors.aliyun.com/pypi/simple
输入控制台字体颜色
- 设置文本颜色为红色
print("\033[91mHello, World!\033[0m")
- 设置文本颜色为绿色
print("\033[92mHello, World!\033[0m")
- 依此类推 93黄 94蓝 95洋红 96青 97白
print("\033[91mHello, World!\033[0m")
默认 Python3.9 为python
命令运行
如果设置后 python -V 仍然没有生效,这可能是因为系统中已经有一个默认的 python 指向另一个版本。 在 macOS 中,默认的 python 可能是指向系统自带的 Python 2.x。 可以尝试创建一个别名(alias)将 python 显式指向 Python 3.9。打开你的 shell 配置文件(例如 .zshrc 或 .bashrc),添加以下行: alias python='python3.9'
保存文件后,执行以下命令来使配置生效: source ~/.zshrc # 或者使用 .bashrc
现在,再次运行python -V
应该显示 Python 3.9 的版本信息。 请注意,为了避免混淆,更好的做法是在脚本中直接使用 python3.9
来调用 Python 3.9,以确保明确使用的是特定版本。
新建 conda 环境
- 创建一个新的虚拟环境
conda create --name myenv
同时指定 Python 版本conda create --name myenv python=3.9
- 激活环境
conda activate myenv
在 Windows 运行activate myenv
- 安装所需的 Python
conda install package_name
或者使用 pip 安装包pip install package_name
删除指定 conda 环境
- 激活删除的环境
conda activate your_environment_name
在 Windows 上运行activate your_environment_name
- 确保已经退出要删除的环境
conda deactivate
- 删除环境
conda env remove --name your_environment_name
- 验证是否删除成功
conda info --envs
conda env list
Django 框架 JsonResponse 中含有中文返回显示转译字符
return JsonResponse(result, json_dumps_params={'ensure_ascii': False})
大模型下载
- 安装 huggingface_hub
pip install -U huggingface_hub
- 下载模型:
huggingface-cli download THUDM/chatglm-6b
下载模型放到指定目录下huggingface-cli download THUDM/chatglm-6b --local-dir /Users/zailiang/models/chatglm
路径拼接两种方法
BASE_DIR
通常是项目的根目录的路径,它是一个字符串。
LOG_PATH = BASE_DIR / "logs"
这行代码使用了 Python 3.4 及以后版本中引入的路径操作符/
。它用于连接两个路径组件,创建一个新的路径对象。在这种情况下,BASE_DIR
应该是一个pathlib.Path
对象,而不是一个简单的字符串。使用这种方法,Python 会自动处理路径分隔符,无论是Windows上的\
还是Unix/Linux上的/
。LOG_PATH = BASE_DIR + "logs"
这一行代码使用了字符串的+
操作符来连接BASE_DIR
和字符串"logs"
。这里BASE_DIR
必须是一个字符串。然而,这种方法不会自动处理路径分隔符,因此可能会在不同的操作系统上产生不同的结果。例如,在 Windows 上,可能需要使用os.path.join(BASE_DIR, "logs")
来确保路径分隔符是正确的。
总结:
- 第一种方法(使用
/
操作符)更加现代,且能自动处理路径分隔符。它要求 BASE_DIR 是一个 pathlib.Path 对象。 - 第二种方法(使用
+
操作符)更简单,但可能不会正确处理路径分隔符,尤其是在不同的操作系统上。它要求 BASE_DIR 是一个字符串。
查询数据库数据呈现 ('xxxxx')
cursor = connection.cursor()
cursor.execute("SELECT paragraph FROM paragraph")
data_all = cursor.fetchall()
for i in data_all:
print(i[0]) # 只打印元组中的第一个元素
pyenv 管理多个 Python 版本
- 安装 pyenv:
curl https://pyenv.run | bash
- 添加 pyenv 到你的 shell 配置文件中
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
- 安装依赖:
sudo yum install -y zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils
- 使用 pyenv 安装 Python 3.9:
pyenv install 3.9.10
- 设置全局 Python 版本(可选):
pyenv global 3.9.10
- 验证 Python 版本:
python --version
Django 后台管理页面无样式
在生产环境下DEBUG=False
,django.contrib.staticfiles
是不起任何作用的,也就说django.contrib.staticfiles
只对开发环境DEBUG=True
开启。所以会导致 xadmin 样式丢失现象。
Django 生成静态文件命令错误
python manage.py collectstatic
失效
settings.py中增加下面配置: STATIC_ROOT = 'static'
Django ORM 关系迁移使用本地 SQLite
settings.py 中DATABASES
需增加
'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
PyMySQL 连接多数据源
from django.db import connection, connections
sqlite_cursor = connections['default'].cursor()
mysql_cursor = connections['mysql'].cursor()
Django ORM 查询无数据
objects_all = Test.objects.all()
print(objects_all)
在 Django 中,默认情况下,模型类的名称将会被转换为小写,并用下划线连接成为数据库表名。如果你希望指定表名,可以在模型类中使用 Meta 类来指定。
from django.db import models
class Test(models.Model):
id = models.IntegerField(primary_key=True, unique=True)
name = models.CharField(max_length=100)
class Meta:
db_table = 'test'
Django 数据库表被命名为<app>_<model>
。 您的应用程序名为 user,您的模型名为 Test,因此自动生成的名称是 user_test。 如果需要,可以在Meta类中重写模型。
class Meta:
app_label = 'my'
Django ORM 查询多数据源
mysql__all = Paragraph.objects.using('mysql').count()
Django ORM 更新失败返回值
update = Test.objects.filter(name='test').update(name='t1')
如果更新成功,则返回受影响的行数(即更新了多少行数据),如果没有数据被更新,则返回 0。因此,如果 update 的值为 5,表示成功更新了 5 行数据,如果为 0,则表示没有符合条件的数据需要更新。
Django ORM 删除返回值
delete = Test.objects.filter(id=1).delete()
输出(1, {'api.Test': 1})
如果成功删除了 5 行数据,则 res 的值将类似于(5, {'api.Test': 5})
,其中'api.Test'
是你的模型的名称,5 是被删除的对象数量。如果没有符合条件的数据需要删除,则返回(0, {})
Django admin 使用多个数据库
为了让 admin 管理页面支持多数据源,需要重写admin.ModelAdmin
类
class MultiDBModelAdmin(admin.ModelAdmin):
using = 'mysql'
def save_model(self, request, obj, form, change):
obj.save(using=self.using)
def delete_model(self, request, obj):
obj.delete(using=self.using)
def get_queryset(self, request):
return super().get_queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
return super().formfield_for_foreignkey(db_field, request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request, **kwargs):
return super().formfield_for_manytomany(db_field, request, using=self.using, **kwargs)
admin.site.register(models.Paragraph, MultiDBModelAdmin)
Python 依赖库一键进行导出
- 使用 pip freeze 命令(导出环境下载的全部的依赖包)
pip freeze > requirements.txt
- 手动创建 requirements.txt 文件 列出项目所需的所有依赖及其版本。例如:
numpy==1.21.0 pandas>=1.3.0
- 使用 pipreqs 工具
pip install pipreqs
在项目根目录下运行:pipreqs ./ --encoding=utf-8 --force
检测项目是否是自己指定的虚拟环境
which pip
which python
正确路径是path/.venv/bin/pip
与 path/.venv/bin/python