以编程方式创建可移植虚拟环境的包。
venvctl的Python项目详细描述
凡夫克特
venvctl是一个CLI工具,允许创建完全portable Python虚拟环境。在
概要
venvctl帮助以bulk或single模式构建fully portablePython虚拟环境,使状态保持在config files。每个虚拟环境都附带详细的降价报告,以概述其状态的完整性、中断的依赖项、错误和生成过程中出现的警告。最终,准备分发的文件夹被打包成tarball。在
局限性
很明显,可移植性仅限于共享同一内核的系统,不希望在基于Debian的系统上构建一个虚拟环境,并将其部署到RHEL主机上,举一个例子
有可能使用不同版本的python而不是目标系统上安装的版本来发布虚拟环境,但是,不要假设在仅配置python2.x的系统上运行基于python3的venvs
要求
venvctl依赖于几个包来说明其核心功能:
piphyperd==1.9.8
piphyperd,用于管理安装和审核的pip
的包装。在
markd,一个Python包,它有助于生成降价风格的文件。在
virtualenv==20.0.35 # Virtual Python Environment builder. click8==8.0.1 # Composable command line interface toolkit. binaryornot==0.4.4 # Ultra-lightweight pure Python package to check if a file is binary or text.
安装
venvctl当前仅通过PyPi.org网站在
pip install --user venvctl
请访问project page,以获取有关包状态和版本的更多信息。在
文件
有关详细说明和完整的API演练,请参阅Official Documenation。在
您可以通过编程或调用CLI来利用venvctl,如下例所示:
以编程方式在bulk中构建虚拟环境
"""Python"""fromvenvctlimportVenvCtl# Build virtualenvs in bulkVenvCtl(config_file=/path/to/config.json,python_binary=/usr/bin/python{version},output_dir=/my/output/dir).run()
利用CLI在bulk中构建虚拟环境
#!/bin/bash# Build virtualenvs in bulk venvctl generate \ --config ~/path/to/your/config/venvs.json \ --out ./venvs
以编程方式构建单个虚拟环境
"""Python"""fromvenvctlimportVenvCtlname="test-venv"packages=["Click==7.0","binaryornot==0.4.4"]# Build a single virtual env;# It will generate the config file for you.VenvCtl.create_venv(name=name,packages=packages_list,output_dir=/my/output/dir)
利用CLI构建单个虚拟环境
#!/bin/bash# Build a single virtual env;# It will generate the config file for you. venvctl create --name my_venv --packages '["tox", "docker"]' --out /my/output/dir
配置文件
配置文件遵循json结构:
[{"name":"base","packages":["asn1crypto==1.3.0","dnspython==1.16.0","enum34==1.1.10","ipaddress==1.0.23","jmespath==0.9.5","lxml==4.5.0","paramiko==2.7.1","psutil==5.7.0","pycrypto==2.6.1","pyopenssl==19.1.0","python-ldap==3.2.0","python-memcached==1.59"]},{"name":"base_networking","parent":"base","packages":["f5-sdk==3.0.21","bigsuds==1.0.6","netaddr==0.7.19","cloudshell-networking-cisco-iosxr==4.0.6"]},{"name":"ansible_2_9","parent":"base","packages":["ansible==2.9.6"]},{"name":"ansible_2_9_networking","parent":"base_networking","packages":["ansible==2.9.6"]}]
构建过程遵循继承模式,在上面的示例中,名为base
的环境是其余环境的核心;ansible_2_9
继承其包;ansible_2_9_tox
在其父级,ansible_2_9
的顶部添加模块。在
使用这种逻辑,批量构建过程可以相当快,即使在部署复杂的虚拟环境时也是如此。在
用容器运行
可以利用为发布venvctl而构建的container image和整个工具链来创建利用Python 2和Python 3的虚拟环境。 {str}下面是的两个示例。在
批量构建虚拟环境,提供Python3.6.8:
docker run -it --rm -v $(pwd)/conf.json:/opt/conf.json \ -v $(pwd)/venvs:/opt/venvs:rw \ eu.gcr.io/hyperd-containers/venv-builder:latest venvctl generate \ --config /opt/conf.json \ --out /opt/venvs \
批量构建虚拟环境,提供Python2.7.16:
docker run -it --rm -v $(pwd)/conf.json:/opt/conf.json \ -v $(pwd)/venvs:/opt/venvs:rw \ eu.gcr.io/hyperd-containers/venv-builder:latest venvctl generate \ --config /opt/conf.json \ --out /opt/venvs \ --python /usr/bin/python2
容器限制
目前,可用的容器映像基于CentOS 8。它适合任何基于RHEL的部署;但是,它在其他场景中不会有用。 更多的内核将被添加,请继续关注,或者您可以随意构建自己的内核来戳我。在
许可证
GNU General Public License v3 (GPLv3)
报告漏洞
如果您认为您在venvctl中发现了安全漏洞,请给我留言,我将协调漏洞响应和披露。在
关于作者
我是一个冲浪者,一个密码交易员,一个15岁的DevSecOps工程师在公共云和私有云中设计高可用性分布式生产环境和开发云本地应用程序的经验丰富。在
- 项目
标签: