相关疑难解决方法(0)

如何比较Python中的版本号?

我正在走一个包含鸡蛋的目录,将这些鸡蛋添加到鸡蛋中sys.path.如果目录中有相同.egg的两个版本,我想只添加最新版本.

我有一个正则表达式r"^(?P<eggName>\w+)-(?P<eggVersion>[\d\.]+)-.+\.egg$从文件名中提取名称和版本.问题是比较版本号,这是一个字符串2.3.1.

因为我正在比较字符串,2种类型超过10,但这对于版本来说不正确.

>>> "2.3.1" > "10.1.1"
True
Run Code Online (Sandbox Code Playgroud)

我可以做一些拆分,解析,转换为int等,我最终会得到一个解决方法.但这是Python,而不是Java.有比较版本字符串的优雅方法吗?

python version string-comparison

205
推荐指数
8
解决办法
9万
查看次数

在 Ansible 中比较 Ubuntu 主要版本和次要版本

当完整的 Ubuntu 版本(Major.Minor,如 18.10)大于或小于指定值时,我需要动态安装 apt 软件包。这是安装在 18.10 中重命名的libvirt-bin正确软件包所必需的。事实上,它包含数字版本,我在旧的 Ansible 文档中找到了版本比较过滤器,该文档似乎在 Ansible 2.5 中重命名,但在最新的 2.9 版本中不起作用:ansible_distribution_version

- name: Execute on ubuntu 18.10 or newer
  shell: "echo Youre on Ubuntu 18.10 or newer"
  when: ansible_distribution_version | version('18.10', '>=')
Run Code Online (Sandbox Code Playgroud)

条件检查 'ansible_distribution_version | 版本('19.10','>=')'失败。错误是:模板化字符串时出现模板错误:没有名为“version”的过滤器。

最新(当前为 2.9)文档不包含任何版本比较过滤器。我尝试了浮动对话,这似乎有效:

- name: Execute on ubuntu 18.10 or newer
  shell: "echo executed on ubuntu 18.10 or newer"
  when: ansible_distribution_version | float >= 18.10
Run Code Online (Sandbox Code Playgroud)

使用此对话是否有任何缺点来证明引入过滤器的version_comparisation合理性?version或者是否有另一个过滤器可以安全地比较我尚未找到的版本?

ubuntu ansible

2
推荐指数
1
解决办法
1810
查看次数

比较 Ansible playbook 中的软件包版本

可能有更好的方法来做到这一点,但到目前为止,我正在使这项工作正常进行,但遇到了问题。我正在尝试执行以下操作:

  1. 使用package_facts并注册包收集包事实
  2. 我调试注册的变量并获取我想要的包,将版本转换为 int
  3. 然后我会动态设置后面的包的变量,并提取版本并转换为 int
  4. 我尝试使用最新版本的软件包的 set 变量升级软件包,并且仅当 set_fact 变量的 int 版本大于已安装的现有软件包时才应用它

这是剧本:

---
- name: Attempt upgrade package
  hosts: all
  gather_facts: false

  tasks:  
     
        - name: Get Splunk package
      package_facts:
        manager: auto
      register: package_info

    - name: Get SplunkForwarder Package Info
      debug:
        var: package_info.ansible_facts.packages.splunkforwarder[0].version
      register: splunk_current_version

    - name: Include variables for new splunk forwarder
      set_fact:
        splunk_latest_version: "{{ splunkforwarder_latest.split('-')[1] }}"
      vars:
        splunkforwarder_latest: "splunkforwarder-9.1.1-82c987350fde-linux-2.6-x86_64.rpm"
      when: splunk_current_version is defined

    - name: Debug latest
      debug:
        var: splunk_latest_version

    - name: Upgrade when latest …
Run Code Online (Sandbox Code Playgroud)

ansible

1
推荐指数
1
解决办法
1339
查看次数

标签 统计

ansible ×2

python ×1

string-comparison ×1

ubuntu ×1

version ×1