<p>pipenv 不尊重当前激活​​的 virtualenv 并创建新的 env</p>

创建于 2017-11-02  ·  3评论  ·  资料来源: pypa/pipenv

不太确定这是否是预期行为,但从使用角度来看,这似乎是一个错误:

问题:

pipenv install <package_name>正在创建一个新的 virtualenv,即使 virtualenv 是使用pipenv shell激活的。

什么时候发生:

如果我们不在Pipfile所在的目录中。

描述你的环境

  1. 操作系统类型:Linux (Ubuntu 16.04)
  2. Python 版本: $ python -V == 3.6.3
  3. Pipenv 版本: $ pipenv --version == 版本 8.3.1

预期结果

如果我们在一个激活的 virtualenv shell 中,(不管pwdpipenv install应该尊重它并正确更新Pipfile并且不应该创建一个新的Pipfile .

实际结果

即使在同一个激活的 virtualenv 中但在不同的目录中,也会创建一个新的 Pipfile。

复制步骤

$ mkdir -p testproject/app
$ cd  testproject/app
$ pipenv install flask
$ pipenv shell # environment gets activated here
$ <my_new_environment>$  cd ..  # Now we are inside testproject
$ pipenv install requests
$ New Pipfile gets created here

最有用的评论

@erinxocon这就是问题所在:用户希望 pipenv 可以替代 pip。

@kennethreitz在 pipenv 主页上自己说的:

您不再需要分别使用 pip 和 virtualenv。 他们一起工作。

pipenv 不仅应该像你说的那样创建 virtualenv,还要管理它。 再次,它在主页上明确提到(强调我的):

它会自动为您的项目创建和管理virtualenv,并在您安装/卸载软件包时从 Pipfile 中添加/删除软件包。

在过去,当我们分别使用 virtualenv 和 pip 时,我们可以导航到任何目录和pip install ,并且该包将正确安装到 virtualenv 中,事实上 pipenv 不会这样做 _while a pipenv -管理的 virtualenv 被激活_打破了用户的期望。

所有3条评论

嗨@ansrivas! 这不是 pipenv 的预期流程。 如果 Pipenv 最初发现自己处于一个虚拟环境中,但不是在所有后续调用中,它就会使用一个虚拟环境。 你会有一个相当多毛的 virtualenv 巢穴! 如果您导航到项目外部的文件夹,pipenv 将创建一个新的 pipfile。 如果您只想在文件夹外安装一些软件包,但在您在子外壳中激活的虚拟环境内,您可以先执行pipenv shell ,然后再执行pip install requests 。 Pipenv 可用于为您的项目创建一个 virtualenv,但它本身并不是一个 virtualenv 管理器,它是一个项目管理器。

@erinxocon这就是问题所在:用户希望 pipenv 可以替代 pip。

@kennethreitz在 pipenv 主页上自己说的:

您不再需要分别使用 pip 和 virtualenv。 他们一起工作。

pipenv 不仅应该像你说的那样创建 virtualenv,还要管理它。 再次,它在主页上明确提到(强调我的):

它会自动为您的项目创建和管理virtualenv,并在您安装/卸载软件包时从 Pipfile 中添加/删除软件包。

在过去,当我们分别使用 virtualenv 和 pip 时,我们可以导航到任何目录和pip install ,并且该包将正确安装到 virtualenv 中,事实上 pipenv 不会这样做 _while a pipenv -管理的 virtualenv 被激活_打破了用户的期望。

我同意@ksze 的观点

期望pipenv应该管理活动的 virtualenv。

沿着类似的路线......我应该能够使用-r将外部 Pipfile 或 Pipenv.lock 安装到当前的 virtualenv 中,而不是创建另一个。

此页面是否有帮助?
0 / 5 - 0 等级