多个存储库中的Python开发 - python

我们正在尝试找到解决该问题的最佳方法。
假设我在Python环境中使用pip和setuptools工作。
我以正常的git flow工作,所以我希望如此。
所以:

移至某些应用程序中的功能分支,进行更改。
移动到从属库中的功能分支-开发东西。
使用“ -e git + ssh”将应用程序指向从属库的功能分支。
创建一个拉取请求。

完成所有这些操作后,我想将内容合并到母版中,但是我不得不对应用程序(上面的第3步)Requirements.txt进行另一个最终更改,现在指向功能的主分支。

是否缺少“微服务”或python中多个相关源代码的良好工作流程?

参考方案

从开发到部署的Python应用程序工作流程

您似乎正在使用git搜索开发Python应用程序。

以下说明适用于任何一种基于Python的应用程序,
不仅限于基于Pyramid的网络。

要求

情况:

使用Pyramid Web框架开发基于Python的解决方案
有多个python软件包,参与最终解决方案,这些软件包可能是依赖的。
一些软件包来自公共pypi,其他则可能是私有的
git控制的源代码

期望:

建议的工作作风应允许:

拉取请求
应在软件包依赖的情况下工作

确保部署是可重复的

拟议的解决方案

概念:

甚至金字塔应用程序也作为版本包发布
对于私人pypi使用devpi-server含。易失性和释放索引。
对于包创建,请使用pbr
使用tox进行包装单元测试
测试,然后发布新的软件包版本
在部署之前进行测试
将部署配置与应用程序包分开

金字塔式网络应用程序

金字塔允许以Python包的形式创建应用程序。在
实际上,整个初始教程(包含21个阶段)都使用了这个
方法。

尽管事实如此,您仍可以在开发模式下运行该应用程序,
在生产中这样做。从发布的程序包运行很容易。

金字塔使用漂亮的.ini配置文件。将development.ini保留在
软件包存储库,因为它是开发不可或缺的一部分。

另一方面,请确保生产.ini文件不存在,因为它们
不应与应用程序混合使用,而应属于部署内容。

为了简化部署,请在您的程序包中添加一个命令,该命令将输出到
标准输出典型部署配置。命名脚本,例如myapp_gen_ini

编写单元测试并配置tox.ini来运行它们。

将部署内容与应用程序分开

将应用程序代码与部署配置混合会在
此刻,您将必须安装到第二实例(因为您可能会
更改至少一行配置)。

在部署存储库中:

保留在requirements.txt,其中列出了应用程序包和其他
生产所需的包装。确保在以下位置指定确切的软件包版本
最少用于您的应用程序包。
保留此处production.ini文件。如果您有更多部署,则每个部署使用一个分支。
放在这里tox.ini

tox.ini应具有以下内容:

[tox]
envlist = py27
# use py34 or others, if your prefer

[testenv]
commands = 
deps =
    -rrequirements.txt

部署存储库的预期用途为:

克隆到服务器
运行tox,这将创建virtualenv .tox/py27
通过$ source .tox/py27/bin/activate激活virtualenv
如果仓库中不存在production.ini,请运行命令
$ myapp_gen_ini > production.ini生成用于生产的模板
组态
根据需要编辑production.ini
测试,它有效。
production.ini更改提交到存储库
做部署应用程序所需的其他工作(配置Web服务器,主管等)

对于setup.py使用pbr

使软件包创建更加简单,并使与git相关的软件包版本保持一致
存储库标签,请使用pbr。您将最终得到setup.py仅3行
long,所有相关的内容将以ini的形式在setup.cfg中指定
文件。

在第一次构建之前,您必须在git存储库中有一些文件,
否则会抱怨。当您使用git时,这应该没问题。

要分配新的软件包版本,请设置$ git tag -a 0.2.0并进行构建。这将
创建版本为0.2.0的软件包。

作为奖励,它将根据您的提交创建AUTHORSChangeLog
消息。将这些文件保留在.gitignore中,并使用它们创建AUTHORS.rst
ChangeLog.rst手动(基于自动生成的内容)。

当您将提交推送到另一个git存储库时,请不要忘记也推送标签。

使用devpi-server作为私人pypi

devpi-server是出色的私人pypi,它将为您带来以下优势:

完全没有私人pypi
缓存的公共pypi包
更快的虚拟环境构建(因为它将从缓存的软件包安装)
即使没有互联网连接也能够使用pip
在各种类型的包索引之间推动:一种用于开发
(发布的版本可以在这里更改),一个用于部署(发布的版本在这里不会更改)。
对任何有权使用它的人进行简单的单元测试,它甚至可以收集
结果,并使其在网页上可见。

对于所描述的工作流,它将作为可部署的python软件包的存储库来提供。

使用的命令将是:

$ devpi upload将已开发的软件包上载到服务器
$ devpi test <package_name>下载,安装,运行单元测试,
将测试结果发布到devpi-server并清理临时安装。
$ devpi push ...将已发布的程序包推入devpi-server甚至公共pypi上的正确索引。

请注意,很容易将pip命令配置为使用
devpi服务器上的$ pip install <package>服务器上选定索引中的软件包。

devpi-server也可以用于连续集成测试。

git如何适合此工作流程

所描述的工作流不限于使用git的特定样式。

另一方面,git可以在以下情况下发挥作用:

commit:提交消息将是自动生成的ChangeLog的一部分
tag:定义版本(setup.py基于pbr识别)。

由于git是分布式的,具有多个存储库,分支等,
devpi-server允许类似的分发,因为每个用户可以拥有自己的分发
要发布的工作索引。无论如何,最后会有一个git信息库
master分支一起使用。在devpi-server中也将达成一致
生产指数。

摘要

描述的过程并不简单,但是复杂性与任务的复杂性有关。

它基于工具:

tox
devpi-server
pbr(Python软件包)
git

提议的解决方案允许:

管理python包,包括发布管理
单元测试和持续集成测试
任何使用git的样式
具有明确定义的范围和交互的部署和开发。

您的问题假设有多个存储库。提出的解决方案允许通过发布到devpi-server的管理良好的软件包版本来解耦多个存储库。

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

python-docx应该在空单元格已满时返回空单元格 - python

我试图遍历文档中的所有表并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。我在类似的帖子中已经看过scanny提供的其他代码,但是由于某种原因,它并没有提供我正在解析的文档的预期输出可以在https://www.ontario.ca/laws/regulation/140300中找到该文档from docx import Document from…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…