两个容器 - 两个Pythons - 一个站点包?

时间:2014-11-06 12:05:34

标签: python docker

假设我有两个独立的docker(或其他一些)容器,它们只能相互共享文件夹。在这两个容器中都安装了相同版本的Python解释器。有没有办法让这些解释器分享几乎相同的PYTHONPATH,例如他们俩都看到安装在这些容器中的所有包?

我知道我可以从文件夹导入包,但我想知道是否可以执行这些步骤:

  1. 使用pip或easy_install在第一个容器中安装包A.该包可能依赖于其他包,它们位于第二个容器中并以某种方式安装到第一个容器中。此外,还有一些可能的依赖项(缺少第二个容器)将被安装到第一个容器中。
  2. 第二个容器导入包A从第一个容器中没有问题,所以它应该看到位于第一个和第二个容器中的两个依赖项。
  3. 问题是,我正在尝试使用stevedore按入口点查找软件包,但它们应该安装,并且可能独立于第二个容器中安装的软件进行升级。

2 个答案:

答案 0 :(得分:0)

我不知道我是否明白这个问题。如果这不能回答你的问题,你能评论一下吗?对我来说,你问了三个问题:

  1. 导入行为(我在下面回答)
  2. 正在更新包
  3. 装卸工 - 是否可选,是尝试还是要求?
  4. 导入行为

    有一个名为sys.path的列表。它是python查找包的文件夹列表。 假设您在此列表中有folder1folder2

    folder1
      +----- module_a
      +----- module_b
    
    folder2
      +----- module_a
      +----- module_c
    

    使用['folder1', 'folder2', ...]作为sys.path的Python流程会这样做:

    import module_a # from folder1
    import module_b # from folder1
    import module_c # from folder2
    

    使用['folder2', 'folder1', ...]作为sys.path的Python流程会这样做:

    import module_a # from folder2 # difference
    import module_b # from folder1
    import module_c # from folder2
    

    这就是我理解Python导入行为的方式。我不使用docker或PYTHONPATH,所以我不能参考它。

答案 1 :(得分:0)

您可以拥有一个容器,其入口点在卷中创建virtualenv并安装需求文件中定义的所有依赖项。然后你可以使用--volumes-from标志在其他容器中挂载虚拟环境并执行activate脚本来导入环境..