Python 3.x `python-m venv foo`不在嵌套环境中安装pip

Python 3.x `python-m venv foo`不在嵌套环境中安装pip,python-3.x,python-venv,Python 3.x,Python Venv,我需要python3.7用于一个项目,但它不能作为ubuntu包提供,所以我使用conda引导了一个python3.7环境。从那个“祖父母”环境中,我为特定项目创建了一个“父母”python3虚拟环境 在我的项目的父环境中,我正在运行一个来自GoogleCloudSDK的命令行工具,它创建了另一个测试环境。该脚本通过调用相当于(parent)$python3-m venv/tmp/granter的东西来创建一个“孙子”环境 出于某种原因,这个孙子环境没有安装pip二进制文件。这就是问题所在。缺少

我需要python3.7用于一个项目,但它不能作为ubuntu包提供,所以我使用conda引导了一个python3.7环境。从那个“祖父母”环境中,我为特定项目创建了一个“父母”python3虚拟环境

在我的项目的父环境中,我正在运行一个来自GoogleCloudSDK的命令行工具,它创建了另一个测试环境。该脚本通过调用相当于
(parent)$python3-m venv/tmp/granter
的东西来创建一个“孙子”环境

出于某种原因,这个孙子环境没有安装pip二进制文件。这就是问题所在。缺少此pip会导致google脚本无法安装开发测试依赖项。然而,父级和子级确实安装了pip,但pip不会被传递下去

当我把conda从图片中去掉,只依赖ubuntu软件包系统附带的python(在/usr/lib下)时,我就可以将我的虚拟环境轻松地嵌套起来,而pip似乎总是被正确地继承。我认为这是python/pip-conda环境特有的东西,我会被它绊倒

我认为这是另一个原因: (我的盒子上没有该文件~/.pydistutils.cfg)

更新

我找到了一种可靠的方法来重新编程,而不需要康达。当使用virtualenv创建父级时,即
virtualenv父级
,并且使用
-m venv
,即
(父级)$python3-m venv child
从该父级创建子级时,会发生这种情况。然后孩子就不会把皮普复制到里面

使用
virtualenv
创建的嵌套环境可以正常工作,使用
venv
创建的嵌套环境也可以正常工作,但在virtualenv创建的环境中使用venv时则不行。他们不混在一起


注意:环境本身并不是真正的“嵌套”,它们是独立的拷贝。我的意思是一个是从另一个创建的。

一个解决方法是使用相同的方法创建所有环境

e、 g.在整个链条的所有环境中使用
python3-m-venv

  • python3-mvenv父代;源父级/bin/激活
  • (父项)$python3-m venv子项

  • 如果这似乎让您陷入了一个符号链接的网络,您还可以提供
    --copies
    标志:
    python3-m venv--copies…
    ,这可以避免这种情况。

    一种解决方法是使用相同的方法创建所有环境

    e、 g.在整个链条的所有环境中使用
    python3-m-venv

  • python3-mvenv父代;源父级/bin/激活
  • (父项)$python3-m venv子项

  • 如果这似乎使您陷入了一个符号链接的网络,您还可以提供
    --copies
    标志:
    python3-m venv--copies…
    ,这可以避免这种情况。

    这与conda有什么关系?Conda和venv是两种不同的解决方案。如果需要conda环境,请使用conda。如果你想要一个venv,使用venv。我可以看出这有多误导。我最初用conda创建了一个python3.7环境(默认情况下,我的ubuntu版本中不提供3.7)。从名为“python3-MvenvMy_项目”的CondaPython3.7环境中创建一个项目虚拟环境。该项目virtualenv的行为与使用我的ubuntu的默认python创建的项目不同,即使用它创建的环境被破坏。康达的事可能是在转移注意力。很可能不是康达本身的bug,但是环境的创建方式有点不同。我的建议是不要这样做。创建一个康达环境。康达和维夫不是为了混在一起而做的。这不理想,大家同意。我补充了为什么需要pip的更多细节。经过一些测试后,我可以报告这与conda无关(我从列表中取出了标签)。它与从使用python-virtualenv创建的环境中调用
    python3-m venv
    有更多的关系。这与conda有什么关系?Conda和venv是两种不同的解决方案。如果需要conda环境,请使用conda。如果你想要一个venv,使用venv。我可以看出这有多误导。我最初用conda创建了一个python3.7环境(默认情况下,我的ubuntu版本中不提供3.7)。从名为“python3-MvenvMy_项目”的CondaPython3.7环境中创建一个项目虚拟环境。该项目virtualenv的行为与使用我的ubuntu的默认python创建的项目不同,即使用它创建的环境被破坏。康达的事可能是在转移注意力。很可能不是康达本身的bug,但是环境的创建方式有点不同。我的建议是不要这样做。创建一个康达环境。康达和维夫不是为了混在一起而做的。这不理想,大家同意。我补充了为什么需要pip的更多细节。经过一些测试后,我可以报告这与conda无关(我从列表中取出了标签)。它与从使用python virtualenv创建的环境中调用
    python3-m venv
    有关。