# centos7编译安装python3.12

# 升级ssl

openssl version

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz

tar zxvf openssl-1.1.1.tar.gz

cd openssl-1.1.1

./config --prefix=/usr/local/openssl

make -j4 && make install 

mv /usr/bin/openssl /usr/bin/openssl.old

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

echo "/usr/local/openssl/lib" | sudo tee -a /etc/ld.so.conf

ldconfig

openssl version

# 安装python3.12

yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++

sudo wget https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tgz

tar -zxvf Python-3.12.6.tgz

cd Python-3.12.6

./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl

# 可能会有疑似错误信息,不需要管,看最终的结果即可。实践来看,只要openssl升级成功,就可以安装成功。(注意,需要1.1.1,  1.1.1-pre8实测失败)
make -j4
 
make altinstall

ln -s /usr/local/python3/bin/python3.12 /usr/local/bin/python3

ln -s /usr/local/python3/bin/python3.12 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3.12 /usr/local/bin/pip3

ln -s /usr/local/python3/bin/pip3.12 /usr/bin/pip3

python3 --version

# windows安装poetry

  • 通过官网下载 https://www.python.org/downloads/,https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe
  • 直接下安装包,使用自定义安装,选择好路径后,一路安装即可,注意勾选添加环境变量。
  • 安装好python后,打开cmd,输入pip install pipx,pipx install poetry

# centos7.6安装poetry

  • 见 【jenkins -> python配置】章节.

# pycharm调试

  • 在控制台安装好poetry
  • 在项目根目录使用poetry shell,(项目一般已经有pyproject.toml文件)
  • 安装项目依赖环境poetry install,如果提示需要更新lock文件,用poetry lock
  • install成功后,pycharm的执行配置里面,python解释器选择 当前目录/.venv/Scripts/python.exe。仅需要配置这一项即可。
  • 配置里面的Script即需要执行的python文件,例如python main.py,也可以选择模块,例如python -m app.main
  • 启动app.py来启动flask与启动flask模块作用一致,python -m flask run 启动 Flask 内置的开发服务器,它会查找名为 app.py 或者wsgi.py 的文件,默认寻找这些文件来导入 Flask 应用实例。

# python模块化编程

  • 模块化编程是一种组织代码的方法,通过将代码分割成多个独立的文件(模块);

# 模块定义

  • 模块:一个 .py 文件就是一个模块。模块可以包含变量、函数、类等定义。
  • 导入模块:使用 import 关键字可以从其他模块中导入定义。

# 模块搜索路径

  • 依次从以下目录搜索模块:
    • 当前目录
    • PYTHONPATH 环境变量指定的目录
    • 标准库目录
    • 第三方库目录
    • from .app_config import DifyConfig中的.表示当前目录搜索模块,使用相对路径

# 包与__init__.py文件

  • 在一个目录中创建 init.py 文件可以将其转换为一个包(package)。包可以包含多个模块。
  • init.py 文件可以为空,也可以包含初始化代码。

# 包的使用

  • 使用 from package import module1, module2, ... 可以导入包中的多个模块。
  • 使用 import package 可以导入整个包,并使用 package.module1、package.module2 等方式访问模块。

# 模块的初始化与缓存

  • 模块被导入时,其中的代码会被执行一次。通常用于初始化模块级别的变量或设置。
  • 模块中的 if name == "main": 块只有在直接运行该模块时才会执行,而不会在导入时执行。
  • Python 会缓存已经导入的模块,因此多次导入同一个模块只会执行一次初始化代码

# python中的关键字

# 控制流关键字

  • if:用于条件判断。
  • elif: 相当于else if。
  • else: 用于条件判断的默认分支。
  • for: 用于循环。
  • while: 用于循环。
  • break: 用于终止循环。
  • continue: 用于跳过当前循环的剩余部分,继续下一次循环。
  • pass: 用于占位符。

# 函数和类关键字

  • def:定义函数。
  • class:定义类。
  • return:返回值。

# 对象和属性操作关键字

  • self:类方法中的第一个参数,表示当前对象。
  • super: 调用父类方法

# 异常处理关键字

  • try: 尝试执行代码块。
  • except: 处理异常。
  • finally: 无论是否发生异常,都会执行。
  • raise: 抛出异常。

# 其他关键字

  • import:导入模块。
  • from ... import ...:从模块中导入定义。
  • as:给导入的模块或对象起一个别名。
  • assert:断言。
  • lambda:匿名函数。
  • global:声明全局变量。
  • nonlocal:声明非局部变量。
  • del: 删除对象
  • yield: 定义生成器函数
  • async: 定义异步函数
  • await: 在异步函数中等待异步操作

# 布尔关键字

  • and: 逻辑与
  • or: 逻辑或
  • not: 逻辑非
  • True: 真值
  • False: 假值
  • None: 空值