Python3、venv和Ansible

首先

Python2系的支持已经结束,已经快一年了。
在平时使用的服务器上,仍然能够正常运行2系的脚本,但是…
我决定一心一意地开始学习3系,为了能够使用它,我总结了这次调研的内容。
就像标题所说的那样,我将以venv(用于多环境)和Ansible(用于基础设施搭建)为例进行说明。

环境构成

在VirtualBox上启动CentOS 7进行实验。

主机机器

    • Windows 10 Pro (20H2)

 

    • VirtualBox:6.1.16

 

    Vagrant:2.2.14

客座机

    CentOS:7.8.2003

启动虚拟机

使用以下的Vagrantfile启动。
vagrant启动!
※CPU与内存的设置根据个人喜好进行。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.define "centos" do |server|
    server.vm.box = "centos/7"
    server.vm.box_version = "2004.01"
    server.vm.hostname = "centos"

    server.vm.provider "virtualbox" do |vb|
      vb.customize [
        "modifyvm", :id,
        "--memory", "4096",
        "--cpus", "2"
      ]
    end
  end
end

安装Python3.

我会立即使用vagrant ssh登录,并开始安装Python3。
在此之前,我将检查现有的Python环境。

$ python -V
Python 2.7.5

这相当久远呢…那么我们开始安装Python3吧。

$ sudo yum install python3

# パスは変更されないので、python コマンドは 2 系のまま
$ python -V
Python 2.7.5

# python3 コマンド 3 系に
$ python3 -V
Python 3.6.8

使用 venv

由于在使用 python3 命令时感到不舒服,并且希望作为开发环境能够拥有多个不同的包环境,所以选择使用 venv。
venv 可以为不同的包提供多个环境。
虽然可以使用 pip 命令安装不同版本的包以及准备不同的环境,但是 python 版本在环境内是固定的限制。

我会立即运行它,因为它可以在Python 3.3及以上版本中作为标准功能使用。

# テスト用にディレクトリ作成
$ mkdir ansible-2.9
$ cd ansible-2.9

# 環境作成
# venv モジュールを使って、新しい環境(.venv)を作成
$ python3 -m venv .venv

# 環境情報用のディレクトリが環境名で作成される
# 今回は . 付きのフォルダのため隠しフォルダになっている
$ ls
$ ls -a
.  ..  .venv

# venv を実行して仮想環境をオンに。
$ source .venv/bin/activate
(.venv) $

または以下でも。
$ . .venv/bin/activate

# python の実行で 3系になっていることを確認
(.venv) $ python -V
Python 3.6.8

# 仮想環境をオフに。
(.venv) $ deactivate
$ python -V
Python 2.7.5

安装和启动Ansible(2.9)

既经设定好 venv 环境后,我会尝试安装软件包。
这次我们会使用 Ansible 来配置基础设施环境。
我们尝试安装 2.9 / 2.10 版本。

# venv で仮想環境をオン
$ pwd
/home/vagrant/ansible-2.9

$ . .venv/bin/activate
(.venv) $ pip install ansible==2.9.16
・・・
(.venv) $ ansible --version
ansible 2.9.16
  config file = None
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/vagrant/ansible-2.9/.venv/lib64/python3.6/site-packages/ansible
  executable location = /home/vagrant/ansible-2.9/.venv/bin/ansible
  python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

安装和启动Ansible(2.10)。

由于创建了 Ansible 2.9 的环境,现在需要创建另一个环境,并准备 Ansible 2.10 的环境。

# 仮想環境をオフに
(.venv) $ deactivate

# Ansible 2.10 用の環境を作ります
$ cd ../
$ mkdir ansible-2.10
$ cd ansible-2.10
$ python3 -m venv .venv
$ . .venv/bin/activate

# ansible がインストールされていないことを確認
(.venv) $ ansible --version
-bash: ansible: command not found

# ansible 2.10 のインストール
(.venv) $ pip install ansible==2.10.4
(.venv) $ ansible --version
ansible 2.10.4
  config file = None
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/vagrant/ansible-2.10/.venv/lib64/python3.6/site-packages/ansible
  executable location = /home/vagrant/ansible-2.10/.venv/bin/ansible
  python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

我已经能够为每个目录准备不同的环境。

概括

这次我尝试准备了与Python相关的开发环境。
希望能够对一直以来在与Python2共存中感到繁琐的人有所帮助。

这是我参考过的文章(非常感谢)。

venv:Python虚拟环境管理
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

Python包开发
https://future-architect.github.io/articles/20200820/

填补一

Python3的支持截止日期如下所示。
我竟然不知道还有已经到期或者即将到期的版本。
3.6版本也将在明年到期…

バージョンリリース日サポート期限3.52015/09/132020/093.62016/12/232021/123.72018/06/272023/063.82019/10/142024/10

补充2

我介绍了 venv,但是请注意每个环境中保留的包会占用磁盘空间。顺便提一下,本次情况如下:
※关于 Collection 的内容,请参考金鱼老师的幻灯片:

# 単位はMB
$ du -ms *
356     ansible-2.10
144     ansible-2.9

$ du -ms ansible-2.10/.venv/lib/python3.6/site-packages/ansible*
10      ansible-2.10/.venv/lib/python3.6/site-packages/ansible
6       ansible-2.10/.venv/lib/python3.6/site-packages/ansible-2.10.4-py3.6.egg-info
1       ansible-2.10/.venv/lib/python3.6/site-packages/ansible_base-2.10.4-py3.6.egg-info
314     ansible-2.10/.venv/lib/python3.6/site-packages/ansible_collections
3       ansible-2.10/.venv/lib/python3.6/site-packages/ansible_test

补充三个

我尝试在Vagrant使用的 Ubuntu 18.04的Box上运行venv,但无法执行。
这可能是由于发行版不包含该程序。
* 根据执行结果,安装python3-venv后问题得到解决。

$ python3 -V
Python 3.6.9

$ python3 -m venv .venv
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt-get install python3-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Failing command: ['/home/vagrant/test/.venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']

四補碼

现在(2020/12/26)似乎无法使用pip search。
突然出现错误,环境出了问题,我以为是那样,但看来世界上的事情真是五花八门啊…
https://github.com/pypa/pip/issues/5216

广告
将在 10 秒后关闭
bannerAds