资讯专栏INFORMATION COLUMN

devpi 快速入门: 上传, 测试, 推送发行版

fjcgreat / 2324人阅读

摘要:命令配置一个调用,使用在索引上的与兼容的页来寻找和下载包。现在我们切回然后寻找我们的发行文件我们看到被包含在两个索引中,让我们移除的发行版如果你没有指定选项,你将被询问确认删除的交互式操作。

</>复制代码

  1. 注:该文的原文是 Quickstart: uploading, testing, pushing releases,来自于 devpi 的官方文档。

该快速入门文档将引导你为你的 Python 包设置完成一个独立的 pypi 发布上传,测试和 staging 系统。

安装 devpi 客户端和服务器端

我想在我的笔记本上运行完整的 devpi 系统:

</>复制代码

  1. pip install -U devpi

这将安装 devpi-clientdevpi-server 这两个 pypi 包。

devpi quickstart:初始化基本场景

devpi quickstart 命令在你本地机器上执行一些基础的初始化步骤:

启动一个后台的 devpi-server,通过 http://localhost:3141 访问

配置客户端工具 devpi 来连接最新启动的 devpi 服务

创建和登陆一个用户,使用你当前默认的登陆名和一个空的密码

创建一个索引然后直接使用它

让我们运行 quickstart 命令来触发一系列的其他 devpi 命令:

</>复制代码

  1. $ devpi quickstart
  2. --> $ devpi-server --start
  3. 2014-09-04 15:12:19,311 INFO NOCTX DB: Creating schema
  4. 2014-09-04 15:12:19,353 INFO [Wtx-1] setting password for user u"root"
  5. 2014-09-04 15:12:19,353 INFO [Wtx-1] created user u"root" with email None
  6. 2014-09-04 15:12:19,353 INFO [Wtx-1] created root user
  7. 2014-09-04 15:12:19,353 INFO [Wtx-1] created root/pypi index
  8. 2014-09-04 15:12:19,367 INFO [Wtx-1] fswriter0: committed: keys: u".config",u"root/.config"
  9. starting background devpi-server at http://localhost:3141
  10. /tmp/home/.devpi/server/.xproc/devpi-server$ /home/hpk/venv/0/bin/devpi-server
  11. process u"devpi-server" started pid=841
  12. devpi-server process startup detected
  13. logfile is at /tmp/home/.devpi/server/.xproc/devpi-server/xprocess.log
  14. --> $ devpi use http://localhost:3141
  15. using server: http://localhost:3141/ (not logged in)
  16. no current index: type "devpi use -l" to discover indices
  17. ~/.pydistutils.cfg : no config file exists
  18. ~/.pip/pip.conf : no config file exists
  19. ~/.buildout/default.cfg: no config file exists
  20. always-set-cfg: no
  21. --> $ devpi user -c testuser password=
  22. user created: testuser
  23. --> $ devpi login testuser --password=
  24. logged in "testuser", credentials valid for 10.00 hours
  25. --> $ devpi index -c dev
  26. http://localhost:3141/testuser/dev:
  27. type=stage
  28. bases=root/pypi
  29. volatile=True
  30. uploadtrigger_jenkins=None
  31. acl_upload=testuser
  32. pypi_whitelist=
  33. --> $ devpi use dev
  34. current devpi index: http://localhost:3141/testuser/dev (logged in as testuser)
  35. ~/.pydistutils.cfg : no config file exists
  36. ~/.pip/pip.conf : no config file exists
  37. ~/.buildout/default.cfg: no config file exists
  38. always-set-cfg: no
  39. COMPLETED! you can now work with your "dev" index
  40. devpi install PKG # install a pkg from pypi
  41. devpi upload # upload a setup.py based project
  42. devpi test PKG # download and test a tox-based project
  43. devpi PUSH ... # to copy releases between indexes
  44. devpi index ... # to manipulate/create indexes
  45. devpi use ... # to change current index
  46. devpi user ... # to manipulate/create users
  47. devpi CMD -h # help for a specific command
  48. devpi -h # general help
  49. docs at http://doc.devpi.net

显示版本:

</>复制代码

  1. $ devpi --version
  2. 2.0.2
devpi install:安装一个包

我们现在可以使用 devpi 命令行客户端来触发一个从已经运行的服务器上使用索引的 pypi 包的 pip install

</>复制代码

  1. $ devpi install pytest
  2. --> $ /tmp/docenv/bin/pip install -U -i http://localhost:3141/testuser/dev/+simple/ pytest [PIP_USE_WHEEL=1,PIP_PRE=1]
  3. Downloading/unpacking pytest
  4. http://localhost:3141/testuser/dev/+simple/pytest/ uses an insecure transport scheme (http). Consider using https if localhost:3141 has it available
  5. Running setup.py (path:/tmp/docenv/build/pytest/setup.py) egg_info for package pytest
  6. http://localhost:3141/testuser/dev/+simple/py/ uses an insecure transport scheme (http). Consider using https if localhost:3141 has it available
  7. Requirement already up-to-date: py>=1.4.22 in /tmp/docenv/lib/python2.7/site-packages (from pytest)
  8. Installing collected packages: pytest
  9. Running setup.py install for pytest
  10. Installing py.test-2.7 script to /tmp/docenv/bin
  11. Installing py.test script to /tmp/docenv/bin
  12. Successfully installed pytest
  13. Cleaning up...

devpi install 命令配置一个 pip 调用,使用在 testuser/dev 索引上的与 pypi 兼容的 +simple/ 页来寻找和下载包。pip 执行的是在 PATH 搜索和在 docenv/bin/pip 寻找。

让我们检查 pytest 是否被正确安装:

</>复制代码

  1. $ py.test --version
  2. This is pytest version 2.6.1, imported from /tmp/docenv/local/lib/python2.7/site-packages/pytest.pyc

你可以第二次调用 devpi install 命令,即使在没有网络的情况下,它也能正常工作。

devpi upload:上传一个或多个包

我们将使用 devpi 命令行工具来执行上传(你也可以使用 plain setup.py)。

让我们检查我们已经登录进了正确的索引:

</>复制代码

  1. $ devpi use
  2. current devpi index: http://localhost:3141/testuser/dev (logged in as testuser)
  3. ~/.pydistutils.cfg : no config file exists
  4. ~/.pip/pip.conf : no config file exists
  5. ~/.buildout/default.cfg: no config file exists
  6. always-set-cfg: no

现在进入你其中一个项目的 setup.py 文件的目录(我们假设名字为 example) 来构建和上传你的包到 testuser/dev 索引。

</>复制代码

  1. example $ devpi upload
  2. using workdir /tmp/devpi0
  3. --> $ /usr/bin/hg st -nmac .
  4. hg-exported project to /tmp/devpi0/upload/example -> new CWD
  5. --> $ /tmp/docenv/bin/python setup.py sdist --formats gztar
  6. built: /home/hpk/p/devpi/doc/example/dist/example-1.0.tar.gz [SDIST.TGZ] 0kb
  7. register example-1.0 to http://localhost:3141/testuser/dev/
  8. file_upload of example-1.0.tar.gz to http://localhost:3141/testuser/dev/

这里有三个触发动作:

检测到一个 mercurial 库,导致拷贝所有的文件版本到一个临时工作目录。如果你没有使用 mercurial,拷贝动作会跳过,会直接在你的源码树上做上传操作。

如我们在 setup.py 中定义的,把 example 版本注册进我们当前的索引

从工作目录,构建和上传一个 gztar 格式的文件到当前索引(使用一个在钩子下面的 setup.py 调用)

我们现在可以安装刚上传好的包:

</>复制代码

  1. $ devpi install example
  2. --> $ /tmp/docenv/bin/pip install -U -i http://localhost:3141/testuser/dev/+simple/ example [PIP_USE_WHEEL=1,PIP_PRE=1]
  3. Downloading/unpacking example
  4. http://localhost:3141/testuser/dev/+simple/example/ uses an insecure transport scheme (http). Consider using https if localhost:3141 has it available
  5. Downloading example-1.0.tar.gz
  6. Running setup.py (path:/tmp/docenv/build/example/setup.py) egg_info for package example
  7. Installing collected packages: example
  8. Running setup.py install for example
  9. Successfully installed example
  10. Cleaning up...

这个你刚刚从 testuser/dev 索引安装的上传包是我们开始上传好的包。

</>复制代码

  1. 注意:devpi upload 允许同时上传你的发行文件的多个不同格式,比如:sdist.zip 或是 bdist_egg,默认是 sdist.tgz

devpi test:测试一个已经上传的包

如果你有一个包使用 tox 做测试,你或许要调用:

</>复制代码

  1. $ devpi test example # package needs to contain tox.ini
  2. received http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz#md5=5bc44b5ac34ff65b6b16b332f9ccc22c
  3. unpacking /tmp/devpi-test0/downloads/example-1.0.tar.gz to /tmp/devpi-test0
  4. /tmp/devpi-test0/example-1.0$ tox --installpkg /tmp/devpi-test0/downloads/example-1.0.tar.gz -i ALL=http://localhost:3141/testuser/dev/+simple/ --result-json /tmp/devpi-test0/toxreport.json -c /tmp/devpi-test0/example-1.0/tox.ini
  5. python create: /tmp/devpi-test0/example-1.0/.tox/python
  6. python installdeps: pytest
  7. python inst: /tmp/devpi-test0/downloads/example-1.0.tar.gz
  8. python runtests: PYTHONHASHSEED="2866296898"
  9. python runtests: commands[0] | py.test
  10. ___________________________________ summary ____________________________________
  11. python: commands succeeded
  12. congratulations :)
  13. wrote json report at: /tmp/devpi-test0/toxreport.json
  14. posting tox result data to http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  15. successfully posted tox result data

以上操作发生了这些事:

devpi 从当前的索引中获取 example 的最新可用版本

把它解压到一个临时目录,发现 tox.ini 并且调用 tox,把它指向我们的 example-1.0.tar.gz。强迫所有的安装都通过我们当前的 testuser/dev/+simple/ 索引和命令它创建一个 json 格式的报告

在所有的测试运行完成后,我们发送 toxreport.json 到 devpi 服务器去,它将被精确的连接到我们的发行文件

我们可以校验测试状态是否被记录:

</>复制代码

  1. $ devpi list example
  2. http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  3. cobra linux2 python 2.7.6 tests passed
devpi push: staging a release to another index

一旦你觉得发行文件没有问题,你可以把它推送到一个 devpi-managed 索引和一个外部的 pypi 索引服务器。

让我们创建另外一个 staging 索引:

</>复制代码

  1. $ devpi index -c staging volatile=False
  2. http://localhost:3141/testuser/staging:
  3. type=stage
  4. bases=root/pypi
  5. volatile=False
  6. uploadtrigger_jenkins=None
  7. acl_upload=testuser
  8. pypi_whitelist=

我们创建了一个非易失性的索引,这意味着不能覆盖和删除发行文件,看 Non Volatile Indexes 来获取更多信息。

我们现在可以把 example-1.0.tar.gz 从上面的所有推送到 staging 索引:

</>复制代码

  1. $ devpi push example-1.0 testuser/staging
  2. 200 register example 1.0 -> testuser/staging
  3. 200 store_releasefile testuser/staging/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  4. 200 store_toxresult testuser/staging/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz.toxresult0

这将决定所有在 testuser/dev 索引上的文件属于指定的 example-1.0 发行版并且把它们拷贝进 testuser/staging 索引。

devpi push: 发行到一个外部的索引

让我们检查我们当前的索引:

</>复制代码

  1. $ devpi use
  2. current devpi index: http://localhost:3141/testuser/dev (logged in as testuser)
  3. ~/.pydistutils.cfg : no config file exists
  4. ~/.pip/pip.conf : no config file exists
  5. ~/.buildout/default.cfg: no config file exists
  6. always-set-cfg: no

让我们使用 testuser/staging 索引:

</>复制代码

  1. $ devpi use testuser/staging
  2. current devpi index: http://localhost:3141/testuser/staging (logged in as testuser)
  3. ~/.pydistutils.cfg : no config file exists
  4. ~/.pip/pip.conf : no config file exists
  5. ~/.buildout/default.cfg: no config file exists
  6. always-set-cfg: no

并且再次检查测试结果:

</>复制代码

  1. $ devpi list example
  2. http://localhost:3141/testuser/staging/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  3. cobra linux2 python 2.7.6 tests passed

从最后一步推送后,测试状态依然是可用的。

我们现在可以决定推送这个发行版到外部的 pypi 索引,我们已经在 .pypirc 文件中配置了:

</>复制代码

  1. $ devpi push example-1.0 pypi:testrun
  2. no pypirc file found at: /tmp/home/.pypirc

这将推送 example-1.0 发行版的所有的文件到一个外部的 testrun 索引服务器。使用资格证书和 发现在 pypi 章节 .pypirc 文件中的 URL。

索引继承重新配置

现在,我们已经有 example-1.0 发行版和发行版文件在 testuser/devtestuser/staging 索引,如果我们想在我们的开发索引上一直使用 staging 包,我们可以重新配置 testuser/dev 的继承基线。

</>复制代码

  1. $ devpi index testuser/dev bases=testuser/staging
  2. /testuser/dev changing bases: ["testuser/staging"]
  3. http://localhost:3141/testuser/dev:
  4. type=stage
  5. bases=testuser/staging
  6. volatile=True
  7. uploadtrigger_jenkins=None
  8. acl_upload=testuser
  9. pypi_whitelist=

现在我们切回 testuser/dev

</>复制代码

  1. $ devpi use testuser/dev
  2. current devpi index: http://localhost:3141/testuser/dev (logged in as testuser)
  3. ~/.pydistutils.cfg : no config file exists
  4. ~/.pip/pip.conf : no config file exists
  5. ~/.buildout/default.cfg: no config file exists
  6. always-set-cfg: no

然后寻找我们的 example 发行文件:

</>复制代码

  1. $ devpi list example
  2. http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  3. cobra linux2 python 2.7.6 tests passed
  4. http://localhost:3141/testuser/staging/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  5. cobra linux2 python 2.7.6 tests passed

我们看到 example-1.0.tar.gz 被包含在两个索引中,让我们移除 testuser/devexample 发行版:

</>复制代码

  1. $ devpi remove -y example
  2. About to remove the following releases and distributions
  3. version: 1.0
  4. - http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  5. - http://localhost:3141/testuser/dev/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz.toxresult0
  6. Are you sure (yes/no)? yes (autoset from -y option)
  7. deleting release 1.0 of example

如果你没有指定 -y 选项,你将被询问确认删除的交互式操作。

example-1.0 发行版本仍然可以通过 testuser/dev 访问,因为他从 testuser/staging 基线继承了所有的发行版。

</>复制代码

  1. $ devpi list example
  2. http://localhost:3141/testuser/staging/+f/5bc/44b5ac34ff65b/example-1.0.tar.gz
  3. cobra linux2 python 2.7.6 tests passed

</>复制代码

  1. $ devpi-server --stop
  2. killed server pid=841
永久的运行 devpi-server

如果你想配置安装一个永久的 devpi-server。你也可以通过 Quickstart: permanent install on server/laptop 获取一些帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45302.html

相关文章

  • 使用 docker + devpi 搭建本地 pypi 源

    摘要:前一段时间开发需要经常使用下载,虽然把源改成了国内源,但我对速度还是不满意,更为重要的是集成测试环境是离线的,要在集成测试环境开发显然需要搭建自己的本地源。在使用之前我曾使用过,但有个导致离线环境下的命令总是失败,所以最后采用搭建源。 前一段时间开发需要经常使用 pip 下载,虽然把 pip 源改成了国内源,但我对速度还是不满意,更为重要的是集成测试环境是离线的,要在集成测试环境开发显...

    Shimmer 评论0 收藏0
  • 使用 docker + devpi 搭建本地 pypi 源

    摘要:前一段时间开发需要经常使用下载,虽然把源改成了国内源,但我对速度还是不满意,更为重要的是集成测试环境是离线的,要在集成测试环境开发显然需要搭建自己的本地源。在使用之前我曾使用过,但有个导致离线环境下的命令总是失败,所以最后采用搭建源。 前一段时间开发需要经常使用 pip 下载,虽然把 pip 源改成了国内源,但我对速度还是不满意,更为重要的是集成测试环境是离线的,要在集成测试环境开发显...

    includecmath 评论0 收藏0
  • 托管Hadoop集群 快速上手 UHadoop

    摘要:也可以将托管集群设置为快捷方式,通过左侧快捷方式菜单栏点击进入。框架集群中仅部署。用于做存储集群,有专属的节点机型。节点管理节点,负责协调整个集群服务。目前仅节点支持绑定。通过云主机内网进行登录。登录密码为集群创建时设置的密码。 快速上手本篇目录创建集群提交任务本文档将带领您如何创建UHadoop集群,并使用UHadoop集群完成数据处理任务。创建集群本章简单介绍了用户使用UHadoop服务...

    ernest.wang 评论0 收藏295

发表评论

0条评论

fjcgreat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<