【问题标题】:Developing with self-owned python pip dependencies and docker使用自有的python pip依赖和docker进行开发
【发布时间】:2019-08-12 17:34:21
【问题描述】:

我有几个 python 应用程序(每个都在单独的 GitHub 存储库中),它们已经发展到它们都需要访问其中一个应用程序中的一些函数和类。

我已将共享代码提取到一个单独的存储库中,并将其作为一个包推送到 Gemfury。

我现在停留在使用此包进行开发所需的步骤上 - 该包通过 Pipfile 作为依赖项安装,并且所有内容都按预期加载到我的开发 docker 容器中。

但是,如果我想对这个包进行更改,那么推送新版本是一个漫长的过程,安装新版本只是为了看看它如何与我的主要应用程序代码一起工作。

我现在有一个单独签出作为卷加载到 docker 容器中的共享 repo,但是当使用“python setup.py develop”时,开发版本不是用户之前安装的版本(作为安装的一部分来自创建容器时的 Pipfile.lock)。

还有其他人有这个挑战并且知道解决这个问题的方法吗?

【问题讨论】:

    标签: python docker pip setuptools pipenv


    【解决方案1】:

    普通的pip install 你有:

    src> git checkout ...app1.git
    src> git checkout ...app2.git
    src> pip install app1
    src> pip install app2
    

    这使用从install_requires 中的setup.py(在全局范围内)获取的版本进行安装。如果您的订单不正确,它将从 pypi 获取应用程序,而不是使用您的本地版本。

    我不知道 pipenv,但是使用 virtualenv,您可以将代码和环境分开:

    src> virtualenv dev
    src> . dev\bin\activate
    (dev) src> pip install -r app1\requirements.txt
    (dev) src> pip install -r app2\requirements.txt
    (dev) src> pip install -e app1
    (dev) src> pip install -e app2
    

    如果 app2 的 requirements.txt 包含 -e ../app1,那么对 app1 的任何更改都将立即对 app2 可见。 (在运行 ci 管道时删除 -e ../ 可以使用 sed 's,-e ../,,g' requirements.txt > requirements-ci.txt 完成,然后它将选择发布到 Gemfury 的最新版本。

    您的 virtualenv 与任何全局安装的包隔离。

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 2019-11-03
      • 2018-10-26
      • 2020-06-25
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多