我们正在努力寻找解决该问题的最佳方法。 假设我在Python环境中工作,使用pip& setuptools的。 我在正常的git流程中工作,或者我希望如此。 所以:
当这一切都完成后,我想把东西合并到主人,但我不能不做另外的最后一次更改才能拥有应用程序(上面的步骤3)requirements.txt现在指向该功能的主要分支。
我们缺少python中的“微服务”或多个依赖源代码是否有良好的工作流程?
答案 0 :(得分:1)
看起来你正在寻找使用git开发Python应用程序。
以下描述适用于任何类型的基于Python的应用程序,
不仅仅是基于Pyramid
的网站。
情况:
期望:
概念:
devpi-server
incl。易失性和释放指数。pbr
tox
进行包单元测试Pyramid允许以Python包的形式创建应用程序。在 事实上,整个初始教程(包含21个阶段)正是使用这个 方法
尽管如此,您可以在开发模式下运行应用程序,但您没有 在生产中这样做。从发布的包中运行很容易。
Pyramid使用漂亮的.ini
配置文件。保留development.ini
包存储库,因为它是开发的组成部分。
另一方面,请确保生产.ini
文件不存在
不应与应用程序混合,属于部署内容。
为了简化部署,请在包中添加一个打印到的命令
stdout典型的部署配置。为脚本命名,例如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
production.ini
,请运行命令
$ myapp_gen_ini > production.ini
生成生产模板
构造production.ini
。production.ini
更改提交到存储库setup.py
使用pbr
包使包创建更简单,并使包版本控制与git相关
存储库标签,使用pbr
。最终setup.py
只有3行
long和所有相关内容将以setup.cfg
以ini的形式指定
文件。
在第一次构建之前,你必须在git repository中有一些文件, 否则会抱怨。当你使用git时,这应该没问题。
要分配新的软件包版本,请设置$ git tag -a 0.2.0
并构建它。这将
使用版本0.2.0
创建包。
作为奖励,它会根据您的提交创建AUTHORS
和ChangeLog
消息。将这些文件保存在.gitignore
中并使用它们创建AUTHORS.rst
和ChangeLog.rst
手动(基于自动生成的内容)。
当你将提交推送到另一个git存储库时,不要忘记推送标签。
devpi-server
作为私人pypi devpi-server
是非常出色的私人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
建议的解决方案允许:
git
您的问题假设有多个存储库。建议的解决方案允许通过管理良好的软件包版本来解耦多个存储库,并发布到devpi-server。
答案 1 :(得分:0)
我们最终使用git依赖,而不是devpi。 我认为当使用git时,只要pip可以使用它,就不需要添加另一个包存储库。
核心问题,分支代码(由于二级依赖)与合并到master的分支代码不同,尚未解决,而是通过努力消除第二级依赖关系来解决这个问题。