首页 > 其他分享 >anisble部署及包冲突处理

anisble部署及包冲突处理

时间:2024-08-15 16:37:36浏览次数:10  
标签:pyyaml libyaml anisble apt ansible 冲突 pip 及包 安装

用pip3 安装ansible

查询使用 pip 工具可以安装的 Python 包:

1. PyPI 官方网站

  • 网址: https://pypi.org/
  • 使用方法: 你可以在 PyPI 官网直接搜索任何 Python 包的名称。每个包的页面通常会列出详细的信息,包括最新版本、历史版本、文档、安装说明以及依赖关系等。

2. pip 工具的 install 命令

  • 命令: pip install package-name
  • 使用方法: 如果你知道包的确切名称,可以直接尝试安装它。如果包存在且版本匹配,它将被安装。如果你不确定包名,可以先在 PyPI 网站上确认

4. Python 包文档或项目主页

# Note: this requirements.txt file is used to specify what dependencies are
# needed to make the package run rather than for deployment of a tested set of
# packages.  Thus, this should be the loosest set possible (only required
# packages, not optional ones, and with the widest range of versions that could
# be suitable)
jinja2 >= 3.0.0
PyYAML >= 5.1  # PyYAML 5.1 is required for Python 3.8+ support
cryptography
packaging
# NOTE: resolvelib 0.x version bumps should be considered major/breaking
# NOTE: and we should update the upper cap with care, at least until 1.0
# NOTE: Ref: https://github.com/sarugaku/resolvelib/issues/69
# NOTE: When updating the upper bound, also update the latest version used
# NOTE: in the ansible-galaxy-collection test suite.
resolvelib >= 0.5.3, < 1.1.0  # dependency resolver used by ansible-galaxy

5. pip install 命令

  • 命令: pip install package-name==x.x.x
  • 使用方法: 这个命令可以安装指定版本的pypi包。

通过前4步的操作,可以明确,想要安装ansible下2.17版本的ansible-core,通过pypi要安装ansible的具体版本,又通过pypi官网,可以查询到ansible的版本号,那么可以直接安装了,如果想要历史版本,可以直接查看release的信息

pip3 install ansible==10.3.0

6. pip show 命令

  • 命令: pip show package-name
  • 使用方法: 这个命令提供了关于已安装包的详细信息,包括版本号、安装位置、依赖关系等。
pip show ansible

Name: ansible
Version: 10.3.0
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
Author-email: [email protected]
License: GPL-3.0-or-later
Location: /usr/local/lib/python3.10/dist-packages
Requires: ansible-core
Required-by: 

#查看ansible版本信息
ansible --version 

ansible [core 2.17.3]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.10.14 (main, Apr  6 2024, 18:45:05) [GCC 9.4.0] (/usr/bin/python3.10)
jinja version = 3.1.4
libyaml = False

到这里ansible部署完成了.

但是ansible配置使用的libyaml是Flase,这表示ansible解析yaml文件时,未使用些模块,而是用python自有的yaml解析器,效率低于C语言编写的libyaml模块

解决libyaml未开启问题

libyaml 是一个用 C 语言编写的 YAML 解析器,它比纯 Python 的 YAML 解析器 (PyYAML) 更快。

从系统安全和稳定性的角度来说,通常建议先尝试使用 pip 来卸载或升级 Python 包,如果遇到问题再考虑使用 apt 或其他系统包管理器。这种做法有以下几个原因:

1. 包的来源

  • pip 安装的包: 如果包是通过 pip 安装的,它的管理和依赖信息都由 pip 处理

  • apt 安装的包: apt 安装的包可能与系统的其他软件有依赖关系。

2. 避免依赖冲突

  • 首先使用 pip: 如果你通过 pip 安装了某个包,并希望升级或卸载,首先使用 pip 可以避免系统与 Python 环境之间的依赖冲突。pip 能准确处理 Python 包的依赖关系,防止残留文件或不完整的卸载。

  • 再使用 apt: 如果 pip 处理失败或遇到与系统包的冲突,可以再考虑使用 apt。这是因为 apt 可以更加全面地处理系统级别的依赖关系,确保系统的稳定性。

在安装升级时,遇到错误如下

pip install pyyaml==6.0.2
Collecting pyyaml==6.0.2
  Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Downloading PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 751.2/751.2 kB 20.0 MB/s eta 0:00:00
WARNING: Error parsing dependencies of distro-info: Invalid version: '0.23ubuntu1'
WARNING: Error parsing dependencies of python-debian: Invalid version: '0.1.36ubuntu1'
Installing collected packages: pyyaml
  Attempting uninstall: pyyaml
    Found existing installation: PyYAML 5.3.1
error: uninstall-distutils-installed-package

× Cannot uninstall PyYAML 5.3.1
╰─> It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

error: uninstall-distutils-installed-package

错误分析:

  • distutils: distutils 是 Python 的标准打包工具,用于安装 Python 包。由于它是直接写入到系统的,而不像 pip 那样管理包的元数据,pip 无法准确识别通过 distutils 安装的包的文件位置。

  • Partial Uninstall: pip 试图卸载旧版本的 PyYAML,但由于它是通过 distutils 安装的,pip 不知道哪些文件属于旧版本,因此无法安全地卸载它。这会导致潜在的“部分卸载”,即某些文件可能会保留在系统中,这会影响新版本的安装和运行。

  • 也就是说,这个pyyaml包不是pip安装的,想卸载时,牵扯到了distutils,此时需要使用apt来解决,将老版本的pyyaml删除

解决方案:

apt 卸载 pyyaml,pyyaml是对应的pip的包名称,对应的apt的包名称是python3-yaml

这个pip包与apt包如何找到对应关系呢

搜索引擎,官方文档,这种关联关系很模糊,不好友

apt remove -y python3-yaml

手动安装pyyaml

pip3 install pyyaml

检查pyyaml部署位置,是否启动libyaml

python3 -c "import yaml; print(yaml.__file__)"

#检查是否启用libyaml
python3 -c "import yaml; print(yaml.__with_libyaml__)"

检查ansible是否启动libyaml解析器

ansible --version 
ansible [core 2.17.3]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.14 (main, Apr  6 2024, 18:45:05) [GCC 9.4.0] (/usr/bin/python3.10)
  jinja version = 3.1.4
  libyaml = True

python,Pyyaml,libyaml三者关系

PyYAML 是 Python 中最常用的 YAML 解析库,它是用纯 Python 编写的,并可以选择性地使用 libyaml 作为底层加速器

libyaml是由C编写的,部署时通过apt或源码安装,这就要求必须有libyaml和libyaml-dev包

apt list --installed  | grep yaml

libyaml-0-2/focal,now 0.2.2-1 amd64 [installed,automatic]
libyaml-dev/focal,now 0.2.2-1 amd64 [installed]

#查看libyaml-0-2信息
apt show libyaml-0-2
Package: libyaml-0-2
Version: 0.2.2-1
Priority: important
Section: libs
Source: libyaml
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Anders Kaseorg <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 152 kB
Depends: libc6 (>= 2.14)
Homepage: https://github.com/yaml/libyaml
Task: minimal, ubuntu-core
Download-Size: 48.9 kB
APT-Manual-Installed: no
APT-Sources: http://mirrors.aliyun.com/ubuntu focal/main amd64 Packages
Description: Fast YAML 1.1 parser and emitter library
 LibYAML is a C library for parsing and emitting data in YAML 1.1, a
 human-readable data serialization format.

#查看libyaml-dev信息
apt show libyaml-dev
Package: libyaml-dev
Version: 0.2.2-1
Priority: extra
Section: libdevel
Source: libyaml
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Anders Kaseorg <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 257 kB
Depends: libyaml-0-2 (= 0.2.2-1)
Suggests: libyaml-doc
Homepage: https://github.com/yaml/libyaml
Download-Size: 58.2 kB
APT-Manual-Installed: yes
APT-Sources: http://mirrors.aliyun.com/ubuntu focal/main amd64 Packages
Description: Fast YAML 1.1 parser and emitter library (development)
 LibYAML is a C library for parsing and emitting data in YAML 1.1, a
 human-readable data serialization format.
 .
 This package contains development headers and static libraries.

This package contains development headers and static libraries.

这里是说dev包将头文件静态库包含在内了,也是PyYAML安装时,会自动启用libyaml,否则无法启用这个libyaml

即按libyaml,PyYAML的顺序部署,libyaml是系统级别的组件

pyyaml官网

https://pyyaml.org/

https://pyyaml.org/wiki/PyYAMLDocumentation

https://pyyaml.org/wiki/LibYAML

标签:pyyaml,libyaml,anisble,apt,ansible,冲突,pip,及包,安装
From: https://www.cnblogs.com/anyux/p/18361302

相关文章

  • git拉取后,代码不见了,没有冲突覆盖,且,没有删除,看我是怎么找回的
    git拉取后,代码不见了,没有冲突覆盖,且,没有删除重点提醒当你的代码丢失时,不要惊慌,首先尝试使用本地的历史记录和远程仓库来找回代码。如果这些方法不起作用,你可以考虑其他的救援工具或寻求帮助。在日常开发中,及时进行备份和提交代码可以避免代码丢失的风险。当你在使用Git......
  • 杆塔驱鸟 | 电网鸟线冲突如何化解?激光驱鸟技术来破局
    鸟类天生需要广阔的视野来猎食和导航,而电网杆塔高大稳固,常有鸟类在这些区域活动。像是猛禽经常会选择电网的普通杆和耐张杆作为栖息和驻足的地方,但这种行为会给它们带来被电死的风险。很多鸟儿还会衔着各种材料在铁塔上筑巢,其中如铁丝、细绳这种巢材极易诱发电击,导致鸟类死伤......
  • kotlin 和 lombok编译冲突的解决办法
    kotlin和lombok编译冲突的解决办法源文档:kotlinlang.org/docs/lombok.html使用KotlinLombok编译插件解决<plugin><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-maven-plugin</artifactId><version>${kotlin.version}......
  • 基于ssm+vue.js+uniapp的基于冲突动态监测算法的健身房预约系统附带文章和源代码部署
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 农业驱鸟:人鸟冲突解决方案
    鸟类,在农业领域常常成为令人头疼的“不速之客”。在崇明岛,通过十多年的生态岛建设,“占全球种群数量1%以上的水鸟物种数”从2011年的7种提升到2023年的16种,东方白鹳等珍稀鸟类数量也达到新高,展现了上海湿地保护的显著成效。然而,这一生态改善也带来了新问题:保护区附近农田频遭鸟......
  • 【经验分享】数据结构——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散
    目录1.线性探测(LinearProbing)2.平方探测(QuadraticProbing)3.双散列探测(DoubleHashing)4.分离链接法(SeparateChaining)5.再散列(Rehashing)如何解答这些常见问题1.写出处理冲突的方法名称2.构造基于该处理冲突方法的哈希表3.求出该哈希表在等概率情况下查找成功......
  • HashMap 中处理哈希冲突,红黑树对于没有实现 Comparable 接口的 Key 处理
    背景:假设有两个对象,分别是stu和teach(都没有实现Comparable接口),将它们添加进去HashMap里,假设这两个对象发生哈希冲突,那么红黑树怎么判断它们谁在左谁在右?依据是什么?​ 当两个对象stu和teach的哈希值相同,且它们没有实现Comparable接口时,Java8的HashMap会使用t......
  • 实际上手体验maven面对冲突Jar包的加载规则
    一、问题背景相信大家在日常的开发过程中都遇到过Jar包冲突的问题,emm,在最近处理业务需求时我也遇到了不同版本jar包冲突导致项目加载出错的问题。主要是一个完整的项目会不可避免的使用第三方的Jar包来实现功能开发,各种第三方包之间可能会存在依赖关系,不同版本的依赖就会可能导......
  • 坚果云,文件夹同步冲突、共享文件夹权限提示文件已共享实际查看不到
    一、提示冲突打开注册表1、按下面的路径\HKEYLOCALMACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\看是否有【Nutstore-临时】开头的项和【Nutstore-通知】开头的项。如果有,删掉这两项就好了。2、重新同步文件夹就可以了二、共享文件夹权......
  • 求助!C++使用Eigen求多项式根报错访问冲突
    本地环境:VS2022安装的NuGet包:Eigen版本3.3.9配置MKL头文件相关代码#include<cmath>#include<math.h>#include<stddef.h>#include<stdlib.h>#include<string.h>voidComputeTest();源文件相关代码#defineEIGEN_USE_MKL_ALL#defineEIGEN_VECTORIZ......