不太确定这是否是预期行为,但从使用角度来看,这似乎是一个错误:
pipenv install <package_name>
正在创建一个新的 virtualenv,即使 virtualenv 是使用pipenv shell
激活的。
如果我们不在Pipfile
所在的目录中。
$ python -V
== 3.6.3$ pipenv --version
== 版本 8.3.1如果我们在一个激活的 virtualenv shell 中,(不管pwd
) pipenv 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
嗨@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 中,而不是创建另一个。
最有用的评论
@erinxocon这就是问题所在:用户希望 pipenv 可以替代 pip。
@kennethreitz在 pipenv 主页上自己说的:
pipenv 不仅应该像你说的那样创建 virtualenv,还要管理它。 再次,它在主页上明确提到(强调我的):
在过去,当我们分别使用 virtualenv 和 pip 时,我们可以导航到任何目录和
pip install
,并且该包将正确安装到 virtualenv 中,事实上 pipenv 不会这样做 _while a pipenv -管理的 virtualenv 被激活_打破了用户的期望。