一个用于python monorepo管理的自以为是的cli工具。
scream的Python项目详细描述
尖叫
Still very much a WIP. Lots of work to be done; please open issues or pull requests.
当你看到一堆Python…包装。
或者…
一个用于python monorepo管理的自以为是的cli工具。
它的目标是简化在单个存储库中创建、测试和部署多个python包的过程。 为了确保名称与pypi不重叠,此工具强制您使用命名空间包。 名称空间是根据python的 pkgutil-style。
为什么要用尖叫?
scream将所有软件包保存到相同的标准
- 执行一致的样式。
- 执行一致性测试。
- 执行一致的文档。
使用tox为跨python版本的独立测试设置virtualenvs。
预提交挂钩,以帮助防止这些该死的错误。
大多数单回购的问题
对于许多包,测试&ci/cd管道可能会变慢。
其他可用的解决方案是:
这些工具功能非常强大,但有时过于强大,会带来相当多的管理开销。
对于私有存储库,安装内部monorepo包依赖关系是很困难的。
可用的解决方案是:
- 把你所有的包裹都公开分发。
- 托管私有pypi索引。
- 使用dependency links安装pip。
尖叫是如何工作的
尖叫的目的是尽可能少的开销来管理你的单回购。 没有花哨的第三方配置或私有的pypi存储库。
Surm使用现有的Python包装要求来解决内部MyRoPoO依赖关系,
以及git
来检测自父分支以来发生的更改。
例如:
分类号setup.cfg。
[metadata]name=company_packageAversion=0.0.1description=Your package description![options]packages=find:install_requires= company_packageB
如果对company_packageA
进行更改,则运行测试…
> scream test --dry-run The following packages have changes compared since branch: `master`: company_packagea Packages that require testing: company_packagea company_packageb
命令
scream init
-先运行这个。在空目录中启动monorepo。scream new <package-name>
-创建新的模板包。scream test [--dry-run][--all][--parallel]
-测试已更改的包和包依赖项。scream install <package-name>[--test]
-安装一个包。--test
安装测试依赖项。deploy <package-name>
-在包目录中运行deploy.py。scream build
-构建一个python控制盘,并将其与所有依赖项捆绑为控制盘。(待办事项)
-v
将启用详细日志。
快速启动
By default packages are tested against python 3.7.x, which means you have it available on your PATH. If you about different versions, please see the configuration options.
> mkdir mymonorepo > cd mymonorepo > scream init Done! Create a new package with `scream new <namespace>.<package_name>` > scream new com.packagea Created project `com.packagea` > scream new com.packageb Created project `com.packageb` > scream test --all --parallel Running tests... (Using all cores) > coverage report
使用MonoRepo软件包
从这个monorepo安装软件包的两种常见方法是:
- 克隆存储库并在ci工具中运行
scream build
或scream install
,以生成包并将其发送到计算机。 - 标准pip从私有或公共github repos将单个软件包安装到任何计算机上。
如果您的存储库是public,则可以使用以下命令在任何位置安装子包:
pip install 'git+ssh://git@github.com/ORG/REPO.git@master#subdirectory=examplea'
如果您的存储库是private, 您需要一些额外的步骤来确保可以安装依赖于这个monorepo中其他包的包。
- 在
setup.cfg
中为每个“本地”依赖项指定dependency_links
:
dependency_links= git+ssh://git@github.com/ORG/REPO.git@master#egg=examplea-0#subdirectory=subpackages/examplea
- pip安装和以前一样,但是指定标志
--process-dependency-links
pip install 'git+ssh://git@github.com/ORG/REPO.git@master#subdirectory=examplea' --process-dependency-links
配置
- 在您的包中
setup.cfg
变量python_requires
确定要对包的python版本进行测试。
- 例如,python_要求=2.7、3.6、3.7
Note: the python versions you intend to test must be available on your path.
即将推出的功能
- []自动版本处理。
- []预提交挂钩到flake8。
- []预提交挂钩,以避免提交大文件。