我们正在尝试找到解决该问题的最佳方法。
假设我在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
的软件包。
作为奖励,它将根据您的提交创建AUTHORS
和ChangeLog
消息。将这些文件保留在.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…