Python基础-18

day17回顾
字节数组的方法
汉字编码:
  'gb18030'
  'gbk'
  'gb2312'
  'utf-8'
  'ascii'
      encode(编码)
  str ------>  bytes()
      decode(解码)
      <------
文件
  打开文件 open
  读 / 写
     (read / readline / readlines)
     (write / writelines)
  关闭文件  close方法

文本文件方式
  字符串(读入后的换行符是'\n',写入换行符,依平台不同而不同)
     Windows       '\r\n'
     Linux/Mac OS  '\n'
二进制文件方式
  字节串

f.flush()  清空缓冲区
------ 以下两个方法通常只对二进制文件进行操作----
f.tell()  获取当前的读写位置
f.seek(offset, whence)  设置当前的读写位置
day18笔记:
标准输入输出文件
  sys.stdin
  sys.stdout
  sys.stderr
  模块名: sys
说明:
  每一个python程序启动后都会有以上三个文件已经打开供我们使用
示例见:
  stdout.py
  stdin.py
  Linux下 Ctrl + D输入文件结束符
面向对象编程
  类 class 和 对象 object
什么是对象:
  对象是指现实中的物体或实例
什么是面向对象:
  把一切看成对象(实例),对象和对象之间用方法(行为)建立关联关系
什么是类:
  拥有相同属性和行为的对象分为一组,即为一个类
  类是用来描述对象的工具
面向对象示意
  车(类)  ----->> BYD E6(京A.88888) 对象(实例)
         \
          \--->> BMW X5(京B.00000) 对象(实例)
  狗(类)  ----->> 小京巴(户籍号: 00001)
         \
          \--->> 导盲犬(户籍号:00002)
  int(类)  --->> 100(对象)
          \
           \-->> 200(对象,实例)
类的创建语法:
  class 类名(继承列表):
      """类文档字符串"""
      实例方法(类内的函数methd) 的定义
      类变量(class variable) 定义
      类方法(@classmethod)定义
      静态方法(@staticmethod)定义
类的作用:
  可以用类创建一个或多个此类的对象(实例)
  类内的变量和方法能被此类所创建的所有实例所共同拥有
说明:
  类名必须是标识符(与变量名命名规则相同,建议首字母大写)
  类名实质上就是变量,它绑定一个类实例
  类的定义最后面要加两个空格以告诉解释执行器,类的定义已经结束
示例:
  class Dog:
      pass
术语
 类         对象      实例
class     object    instance
构造函数:
  构造函数的调用表达式 
    类名([创建传参列表])
    [] 里的内容代表可省略
  作用:
    创建这个类的实例对象,并返回此实例对象的引用关系
示例:
  class Dog:  # 定义一个类
      pass
  dog1 = Dog()     # 用类来创建一个对象用dog1绑定
  print(id(dog1))  # 打印dog1所在的内存地址
  dog2 = Dog()  #  创建第二个对象 用dog2绑定
  print(id(dog2))
  print(dog1 is dog2)  # 判断两只狗是不是同一条狗
实例说明:
  实例有自己的作用域或名字空间,可以为该实例添加实例变量(也叫属性)
  实例可以调用类的方法
  实例可以访问类中的类变量
实例变量(属性 attribute)
  每个实例可以有自己的变量,称为实例变量(属性)
属性的使用语法:
  实例.属性名
属性的赋值规则:
  (同变量规则相同)
  1. 首次为属性赋值则创建此属性
  2. 再次为属性赋值则改变属性的绑定关系
示例:
  class Dog:
      pass
  dog1 = Dog()
  dog1.kinds = "京巴"  #为dog1绑定的实例添加kinds属性
  dog1.color = "白色"  # 添加属性
  print(dog1.kinds, dog1.color)  # 访问属性
  dog1.color = '黄色' # 修改dog1.color 的绑定关系
  print(dog1.color)

练习:
  自己写一个Student类,此类的对象有属性name, age, score, 用来保存学生的姓名,年龄,成绩
   1) 写一个函数 input_student读入n个学生的信息,用对象来存储这些信息(不用字典), 并返回对象的列表
   2) 写一个函数output_student 打印这些学生信息(格式不限)
  示意:
    class Student:
       pass
    def input_student():
        ...  # 获取学生信息,形成列表返回
    def output_student(lst):
        # 打印学生信息
    def main():
        L = input_student()
        output_student(L)
    main()

删除属性
  del 语句
  语法:
    del 对象.属性名
示例:
  class Student:
      pass
  stu = Student()
  stu.name = 'xiaozhang'  # 创建属性
  print(stu.name)
  del stu.name  # 删除此属性
  print(stu.name)  # 属性错误,因为属性已经不存在了

实例方法 method
  语法:
    class 类名(继承列表):
        def 实例方法名(self, 参数1, 参数2, ....):
           语句块
  作用:
    用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
  说明
    实例方法的实质是函数,是定义在类内的函数
    实例方法的第一个参数代表调用这个方法的实例,一般命名为'self'
实例方法的调用语法:
  实例.实例方法名(调用参数)
  或
  类名.实例方法名(实例, 调用参数)

初始化方法
  作用:
    对新创建的对象添加属性等必须的资源
  语法形式:
    class 类名:
        def __init__(self[,参数列表]):
            语句块
        [] 代表其中内容可省略
  说明:
    初始化方法名必须为__init__不可改变
    初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入__init__方法
    构造函数的实参将通过__init__方法的参数列表传到__init__方法中
    初始化方法内如果需要return语句返回,则必须返回None
示例见:
   init_method.py

练习:
  修改之前练习的Student类,为该类添加初始化方法,实现在创建对象时自动添加name,age,score属性

析构方法:
  语法形式:
    class 类名:
        def __del__(self):
            语句块
  作用:
    在对象被销毁之前被调用,主要负责清理对象所占用的资源
  说明:
    python建议尽可能少的在析构方法内做事情,因为销毁时间难以确定
示例见:
  del_method.py
预置的实例属性:
  __dict__属性:
    用于绑定一个存储此实例自身变量的字典
 
  __class__属性
    用于绑定创建此实例的类
  示例:
    class Dog:
        pass
    dog1 = Dog()
    print(dog1.__dict__)
    dog1.color = "白色"
    print(dog1.__dict__)
    print(dog1.__class__) 
用于类的函数:
  isintance(obj, class_or_tuple) 返回这个对象obj是否是某个类的对象,或者某些类中的一个类的对象,如果是则返回True, 否则返回False
  type(obj)  返回对象的类
对象:
  属性(对象拥有的名词)  用实例变量存储
  行为(对象拥有的动作)  用方法表示

练习:
  1. 定义一个类Huamn(人类)
    有三个属性:
       姓名: name
       年龄: age
       家庭住址: address (可以省略没有)
    有如下方法:
       show_info(self) 用来显示人的信息
       update_age(self) 方法用来让这个人的年龄增加一岁
 
    def input_human():
        输入下此人的信息,姓名为空结束
    def main():
        docs = input_human()
        for h in docs:
            h.show_info()  # 列出所有人的信息
        for h in docs:
            h.update_age()  # 让所有人都长一岁
        for h in docs:
            h.show_info()  # 再次列表所有人的信息
    main()  # 调用主函数运行
[root@controller ~]# yum install python3-pysaml2 python3-xmlschema python3-tox python3-devel Last metadata expiration check: 1:41:42 ago on 2025年06月18日 星期三 15时12分15秒. Error: Problem 1: 冲突的请求 - 没有东西可提供 python3 = 3.9.9-28.oe2203sp3(python3-devel-3.9.9-28.oe2203sp3.x86_64 需要) Problem 2: 软件包 python3-tox-3.24.4-1.oe2203sp3.noarch 需要 python3-devel,但没有提供者可以被安装 - 冲突的请求 - 没有东西可提供 python3 = 3.9.9-28.oe2203sp3(python3-devel-3.9.9-28.oe2203sp3.x86_64 需要) Problem 3: 软件包 python3-xmlschema-1.5.2-1.oe2203sp3.noarch 需要 python3-tox,但没有提供者可以被安装 - 软件包 python3-tox-3.24.4-1.oe2203sp3.noarch 需要 python3-devel,但没有提供者可以被安装 - 冲突的请求 - 没有东西可提供 python3 = 3.9.9-28.oe2203sp3(python3-devel-3.9.9-28.oe2203sp3.x86_64 需要) Problem 4: 软件包 python3-xmlschema-1.5.2-1.oe2203sp3.noarch 需要 python3-tox,但没有提供者可以被安装 - 软件包 python3-pysaml2-7.1.2-1.oe2203sp3.noarch 需要 python3.9dist(xmlschema) >= 1.2.1,但没有提供者可以被安装 - 软件包 python3-tox-3.24.4-1.oe2203sp3.noarch 需要 python3-devel,但没有提供者可以被安装 - 冲突的请求 - 没有东西可提供 python3 = 3.9.9-28.oe2203sp3(python3-devel-3.9.9-28.oe2203sp3.x86_64 需要) (try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) [root@controller ~]#
最新发布
06-19
<think>我们正在欧拉系统上安装OpenStackKeystone,但遇到了依赖冲突问题。根据错误信息,主要问题集中在以下几个包:-`python3-pysaml2`需要`python3.9dist(xmlschema)>=1.2.1`-`python3-keystone`需要`python3-pysaml2`-`python3-xmlschema`需要`python3-tox`-`python3-tox`需要`python3-devel`-而安装`python3-devel`需要`python3=3.9.9-28.oe2203sp3`,但似乎没有找到匹配的版本同时,错误信息提示我们可以尝试使用`--skip-broken`跳过无法安装的包或`--nobest`使用非最佳候选包。然而,这并不是最佳解决方案,因为跳过依赖可能导致软件无法正常工作。结合引用内容[^3],我们注意到在欧拉系统中使用yum安装时可能会遇到Python环境问题,特别是当系统同时存在多个Python版本时。引用[^3]中的错误信息表明,系统试图使用`python2-dnf`,但未找到匹配包,这提示我们可能需要调整Python解释器的设置。###解决方案步骤####1.确认Python版本首先,我们需要确认系统中安装的Python3版本是否为3.9。因为错误信息中提到了`python3=3.9.9-28.oe2203sp3`,所以我们需要检查该版本是否可用。```bashpython3--version```如果版本不是3.9,我们需要安装3.9版本。欧拉系统通常使用dnf或yum安装软件包,我们可以尝试:```bashsudodnfinstallpython39```如果系统中没有python3.9,我们可能需要添加包含该版本软件包的软件源。####2.安装python3-devel错误信息显示`python3-tox`需要`python3-devel`,而`python3-devel`又需要特定版本的`python3`。因此,我们尝试单独安装`python3-devel`:```bashsudodnfinstallpython3-devel-3.9.9-28.oe2203sp3```如果提示找不到该版本,我们可以尝试安装最新版本的`python3-devel`:```bashsudodnfinstallpython3-devel```####3.处理依赖链如果上述步骤成功,接下来我们尝试安装依赖链中的其他包:```bashsudodnfinstallpython3-toxpython3-xmlschemapython3-pysaml2```####4.使用--nobest选项安装openstack-keystone如果依赖包安装成功,我们再次尝试安装openstack-keystone,并添加`--nobest`选项以允许使用非最佳候选包:```bashsudodnfinstall--nobestopenstack-keystone```####5.如果问题依旧:手动编译安装缺失依赖如果上述方法无效,我们可以考虑手动安装缺失的依赖。引用[^1]中提到,对于某些Python包,我们可以从指定的第三方库下载.whl文件进行安装。虽然引用[^1]是针对Windows的,但我们可以借鉴其思路,从源码编译安装。例如,对于`python3-xmlschema`,我们可以使用pip安装(但需注意,在系统范围内使用pip安装可能会与包管理器产生冲突,因此建议仅在必要时使用):```bashpip3installxmlschema--user```但请注意,这样安装的包可能不会被系统包管理器识别,因此可能会导致后续问题。更好的方法是找到这些包的欧拉系统RPM包,或者从源码编译生成RPM包。####6.添加必要的软件源欧拉系统默认的软件源可能不包含所有需要的软件包。我们可以考虑添加EPEL(ExtraPackagesforEnterpriseLinux)源或其他第三方源。例如:```bashsudodnfinstallepel-releasesudodnfupdate```然后再次尝试安装。####7.解决ansible_python_interpreter问题(参考引用[^3])引用[^3]中的错误提示我们需要设置正确的`ansible_python_interpreter`。虽然我们当前的问题不是直接由Ansible引起,但Python解释器的路径问题可能同样存在。确保系统中`/usr/bin/python3`指向正确的Python3.9解释器:```bashls-l/usr/bin/python3```如果链接不存在或指向错误的版本,我们可以创建正确的软链接:```bashsudoln-sf/usr/bin/python3.9/usr/bin/python3```###验证安装安装完成后,我们可以通过以下命令验证Keystone是否安装成功:```bashkeystone-manage--version```或者检查服务状态:```bashsystemctlstatushttpd```###常见问题1.**软件源配置**:确保欧拉系统的软件源配置正确且已更新。2.**Python环境**:避免系统中存在多个版本的Python造成混乱,确保系统默认的`python3`命令指向所需版本。3.**依赖冲突**:如果遇到依赖冲突,可以尝试使用`dnfrepoquery--requires`和`dnfrepoquery--whatrequires`来查看依赖关系,从而找到冲突点。###相关问题1.如何为欧拉系统添加EPEL软件源?2.在欧拉系统中,如何管理多个Python版本?3.如何从源码编译生成欧拉系统的RPM包?4.安装OpenStackKeystone后,如何进行基本配置和初始化?希望以上步骤能够帮助您解决依赖冲突问题。</think>### 解决欧拉系统安装OpenStack Keystone依赖冲突的方案 在欧拉系统中安装 `openstack-keystone` 时遇到的依赖冲突问题(涉及 `python3-pysaml2`, `python3-xmlschema`, `python3-tox`, `python3-devel`),可通过以下步骤解决: --- #### **解决方案步骤** 1. **启用必需软件源** ```bash # 启用EPEL和PowerTools源 sudo dnf install epel-release sudo dnf config-manager --set-enabled powertools ``` 2. **安装基础依赖包** ```bash # 安装核心依赖(解决python3-devel问题) sudo dnf install python39-devel gcc openssl-devel libffi-devel ``` 3. **解决Python包依赖** ```bash # 方法1:使用pip安装缺失的Python包(优先尝试) pip3 install pysaml2 xmlschema tox --user export PATH=$PATH:~/.local/bin # 添加用户路径 # 方法2:手动下载RPM包(引用[1]思路) # 从 https://build.openeuler.org 搜索并下载: # python3-pysaml2, python3-xmlschema, python3-tox sudo dnf install ./python3-pysaml2-*.rpm ./python3-xmlschema-*.rpm ``` 4. **强制安装Keystone** ```bash # 使用--nobest忽略依赖冲突(引用错误提示) sudo dnf install --nobest openstack-keystone ``` 5. **验证Python解释器路径**(引用[3]问题) ```bash # 确保系统默认Python路径正确 sudo alternatives --set python3 /usr/bin/python3.9 ``` --- #### **关键问题分析** - **依赖冲突根源**: - `python3-pysaml2` → 需要 `xmlschema>=1.2.1` - `python3-xmlschema` → 需要 `python3-tox` - `python3-tox` → 需要 `python3-devel` - 欧拉源中 `python3-devel` 要求严格版本匹配(`python3=3.9.9-28.oe2203sp3`)[^3] - **解决思路**: 1. 通过EPEL源补充缺失依赖 2. 使用pip绕过yum的严格版本控制(引用[1]方法) 3. 手动安装RPM包解决依赖链 4. 调整Python解释器路径(解决引用[3]类问题) --- #### **验证安装成功** ```bash # 检查Keystone版本 keystone-manage --version # 验证服务状态 systemctl status httpd ``` --- ### 相关问题 1. **如何验证欧拉系统中OpenStack Keystone的安装是否成功?** > 通过 `openstack-service status` 检查服务状态,使用 `openstack token issue` 测试认证功能。 2. **在欧拉系统中部署OpenStack时,还有哪些常见依赖问题需要提前解决?** > 常见问题包括:Python 2/3混合环境冲突[^3]、SELinux策略限制、防火墙配置等。 3. **如何为欧拉系统添加自定义的第三方软件源?** > 在 `/etc/yum.repos.d/` 创建 `.repo` 文件,例如添加OpenStack Rocky源: > ```ini > [openstack-rocky] > name=OpenStack Rocky > baseurl=https://build.openeuler.org/openstack/rocky/ > enabled=1 > gpgcheck=0 > ``` 4. **当 `yum` 和 `pip` 安装的Python包冲突时,应如何安全地解决?** > 优先使用虚拟环境隔离:`python3 -m venv openstack-venv && source openstack-venv/bin/activate`,然后在虚拟环境中安装包[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值