1.前言
使用Python进行网路自动化编程时,会使用到许多的外挂模组及框架,当许多东西安装在一起时就可能发生模组冲突。这篇文章说明如何使用Virtualenv建立独立的python专案开发环境及使用pip管理模组套件。
2.安装 Virtualenv及pip
$ sudo apt install python-virtualenv$ virtualenv --versionvirtualenv 20.13.0+ds from /usr/lib/python3/dist-packages/virtualenv/__init__.py$ sudo apt install python-pip3$ pip --versionpip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
3.建立virtual enviroment
首先我们观察全域python的模组数量$ pip list | wc -l105
建立virtual enviroment$ mkdir my-first-env$ virtualenv my-first-env -p python3.10created virtual environment CPython3.10.6.final.0-64 in 110ms creator CPython3Posix(dest=/home/pchan/GitHub/my-first-env, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/pchan/.local/share/virtualenv) added seed packages: pip==22.3.1, setuptools==65.6.3, wheel==0.38.4 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator$ source my-first-env/bin/activate
建立成功后,你会发现prompt发生了改变,多了一个**(virtual environemnt name)**(my-first-env) $
使用 pip list观察,我们建立了一个目前只有少量模组的独立环境。这边的模组会与global的完全独立(my-first-env) $ pip listPackage Version---------- -------pip 22.3.1setuptools 65.6.3wheel 0.38.4
4.使用pip进行模组管理
安装模组 $ pip install paramiko(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip install paramikoCollecting paramiko Using cached paramiko-2.12.0-py2.py3-none-any.whl (213 kB)Collecting pynacl>=1.0.1 Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)Collecting bcrypt>=3.1.3 Using cached bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl (593 kB)Collecting six Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)Collecting cryptography>=2.5 Using cached cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl (4.2 MB)Collecting cffi>=1.12 Using cached cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (441 kB)Collecting pycparser Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)Installing collected packages: six, pycparser, bcrypt, cffi, pynacl, cryptography, paramikoSuccessfully installed bcrypt-4.0.1 cffi-1.15.1 cryptography-38.0.4 paramiko-2.12.0 pycparser-2.21 pynacl-1.5.0 six-1.16.0(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip listPackage Version------------ -------bcrypt 4.0.1cffi 1.15.1cryptography 38.0.4paramiko 2.12.0 (paramiko已安装,其余所需的套件也一并安装了)pip 22.3.1pycparser 2.21PyNaCl 1.5.0setuptools 65.6.3six 1.16.0wheel 0.38.4
安装特定版本模组 $ pip install netmiko==3.4.0(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip install netmiko==3.4.0Collecting netmiko==3.4.0 Downloading netmiko-3.4.0-py3-none-any.whl (178 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 178.9/178.9 kB 258.8 kB/s eta 0:00:00Collecting ntc-templates Using cached ntc_templates-3.2.0-py3-none-any.whl (354 kB)Collecting tenacity Using cached tenacity-8.1.0-py3-none-any.whl (23 kB)Collecting scp>=0.13.2 Using cached scp-0.14.4-py2.py3-none-any.whl (8.6 kB)Requirement already satisfied: paramiko>=2.6.0 in ./my-first-env/lib/python3.10/site-packages (from netmiko==3.4.0) (2.12.0)Requirement already satisfied: setuptools>=38.4.0 in ./my-first-env/lib/python3.10/site-packages (from netmiko==3.4.0) (65.6.3)Collecting pyserial Using cached pyserial-3.5-py2.py3-none-any.whl (90 kB)Requirement already satisfied: bcrypt>=3.1.3 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.6.0->netmiko==3.4.0) (4.0.1)Requirement already satisfied: six in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.6.0->netmiko==3.4.0) (1.16.0)Requirement already satisfied: cryptography>=2.5 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.6.0->netmiko==3.4.0) (38.0.4)Requirement already satisfied: pynacl>=1.0.1 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.6.0->netmiko==3.4.0) (1.5.0)Collecting textfsm<2.0.0,>=1.1.0 Downloading textfsm-1.1.3-py2.py3-none-any.whl (44 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.7/44.7 kB 1.7 MB/s eta 0:00:00Requirement already satisfied: cffi>=1.12 in ./my-first-env/lib/python3.10/site-packages (from cryptography>=2.5->paramiko>=2.6.0->netmiko==3.4.0) (1.15.1)Collecting future Using cached future-0.18.2-py3-none-any.whlRequirement already satisfied: pycparser in ./my-first-env/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=2.5->paramiko>=2.6.0->netmiko==3.4.0) (2.21)Installing collected packages: pyserial, tenacity, future, textfsm, ntc-templates, scp, netmikoSuccessfully installed future-0.18.2 netmiko-3.4.0 ntc-templates-3.2.0 pyserial-3.5 scp-0.14.4 tenacity-8.1.0 textfsm-1.1.3
升级到最新版本 $ pip install --upgrade netmiko(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip install --upgrade netmikoRequirement already satisfied: netmiko in ./my-first-env/lib/python3.10/site-packages (3.4.0)Collecting netmiko Using cached netmiko-4.1.2-py3-none-any.whl (196 kB)Requirement already satisfied: setuptools>=38.4.0 in ./my-first-env/lib/python3.10/site-packages (from netmiko) (65.6.3)Requirement already satisfied: ntc-templates>=2.0.0 in ./my-first-env/lib/python3.10/site-packages (from netmiko) (3.2.0)Requirement already satisfied: paramiko>=2.7.2 in ./my-first-env/lib/python3.10/site-packages (from netmiko) (2.12.0)Requirement already satisfied: tenacity in ./my-first-env/lib/python3.10/site-packages (from netmiko) (8.1.0)Requirement already satisfied: scp>=0.13.3 in ./my-first-env/lib/python3.10/site-packages (from netmiko) (0.14.4)Requirement already satisfied: pyserial in ./my-first-env/lib/python3.10/site-packages (from netmiko) (3.5)Collecting pyyaml>=5.3 Using cached PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)Collecting textfsm==1.1.2 Using cached textfsm-1.1.2-py2.py3-none-any.whl (44 kB)Requirement already satisfied: future in ./my-first-env/lib/python3.10/site-packages (from textfsm==1.1.2->netmiko) (0.18.2)Requirement already satisfied: six in ./my-first-env/lib/python3.10/site-packages (from textfsm==1.1.2->netmiko) (1.16.0)Requirement already satisfied: bcrypt>=3.1.3 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.7.2->netmiko) (4.0.1)Requirement already satisfied: pynacl>=1.0.1 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.7.2->netmiko) (1.5.0)Requirement already satisfied: cryptography>=2.5 in ./my-first-env/lib/python3.10/site-packages (from paramiko>=2.7.2->netmiko) (38.0.4)Requirement already satisfied: cffi>=1.12 in ./my-first-env/lib/python3.10/site-packages (from cryptography>=2.5->paramiko>=2.7.2->netmiko) (1.15.1)Requirement already satisfied: pycparser in ./my-first-env/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=2.5->paramiko>=2.7.2->netmiko) (2.21)Installing collected packages: textfsm, pyyaml, netmiko Attempting uninstall: textfsm Found existing installation: textfsm 1.1.3 Uninstalling textfsm-1.1.3: Successfully uninstalled textfsm-1.1.3 Attempting uninstall: netmiko Found existing installation: netmiko 3.4.0 Uninstalling netmiko-3.4.0: Successfully uninstalled netmiko-3.4.0Successfully installed netmiko-4.1.2 pyyaml-6.0 textfsm-1.1.2
假如你配置好一个你满意的环境,你可以用这个技巧 $ pip freeze > requirement.txt(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip freeze > requirement.txt (建立安装清单)(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ cat requirement.txt (检视模组清单)bcrypt==4.0.1cffi==1.15.1cryptography==38.0.4future==0.18.2netmiko==4.1.2ntc-templates==3.2.0paramiko==2.12.0pycparser==2.21PyNaCl==1.5.0pyserial==3.5PyYAML==6.0scp==0.14.4six==1.16.0tenacity==8.1.0textfsm==1.1.2(my-first-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ deactivate (离开my-first-env)pchan@LAPTOP-UP9VD31I:~/GitHub$ mkdir my-second-env (建立资料夹)pchan@LAPTOP-UP9VD31I:~/GitHub$ virtualenv my-second-env -p python3.10 (建立第二个env)pchan@LAPTOP-UP9VD31I:~/GitHub$ source my-second-env/bin/activate(my-second-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip install -r requirement.txt(my-second-env) pchan@LAPTOP-UP9VD31I:~/GitHub$ pip listPackage Version------------- -------bcrypt 4.0.1cffi 1.15.1cryptography 38.0.4future 0.18.2netmiko 4.1.2ntc-templates 3.2.0paramiko 2.12.0pip 22.3.1pycparser 2.21PyNaCl 1.5.0pyserial 3.5PyYAML 6.0scp 0.14.4setuptools 65.6.3six 1.16.0tenacity 8.1.0textfsm 1.1.2wheel 0.38.