以编程方式创建可移植虚拟环境的包。

venvctl的Python项目详细描述


凡夫克特

codecovpipeline statussecurity: banditPython packageKnown Vulnerabilities

venvctl是一个CLI工具,允许创建完全portable Python虚拟环境。在

概要

venvctl帮助以bulksingle模式构建fully portablePython虚拟环境,使状态保持在config files。每个虚拟环境都附带详细的降价报告,以概述其状态的完整性、中断的依赖项、错误和生成过程中出现的警告。最终,准备分发的文件夹被打包成tarball。在

局限性

很明显,可移植性仅限于共享同一内核的系统,不希望在基于Debian的系统上构建一个虚拟环境,并将其部署到RHEL主机上,举一个例子

有可能使用不同版本的python而不是目标系统上安装的版本来发布虚拟环境,但是,不要假设在仅配置python2.x的系统上运行基于python3的venvs

要求

venvctl依赖于几个包来说明其核心功能:

piphyperd==1.9.8

piphyperd,用于管理安装和审核的pip的包装。在

^{pr2}$

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 2Python 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中发现了安全漏洞,请给我留言,我将协调漏洞响应和披露。在

关于作者

Francesco Cosentino

我是一个冲浪者,一个密码交易员,一个15岁的DevSecOps工程师在公共云和私有云中设计高可用性分布式生产环境和开发云本地应用程序的经验丰富。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX SwingWorker等价物?   java如何检查一个字符串只包含数字和一个小数点?   java遇到了异常组织。阿帕奇。卡塔琳娜。LifecycleException:无法启动组件   java如何从日期格式获取最低计时单位?   java应用服务器与开发过程的集成   java我无法运行Junit测试   无法在java多线程处理中维护生产者任务的顺序   java如何在CLI应用程序中“拦截”Ctrl+C?   java如何使用JSch进行原子SFTP文件传输,以便在写入过程完成之前无法访问该文件?   java当用户摆弄html范围滑块时,如何更改内容(文本)?   如何在Java中向现有文件追加文本?   JUnit测试中的java模拟Apache驼峰位置   java Maven更新项目和依赖项