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/b2fd47cf32c7694adc2ePython包开发
https://future-architect.github.io/articles/20200820/
填补一
Python3的支持截止日期如下所示。
我竟然不知道还有已经到期或者即将到期的版本。
3.6版本也将在明年到期…
补充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