【问题标题】:How to set PIPENV_VENV_IN_PROJECT on per-project basis如何在每个项目的基础上设置 PIPENV_VENV_IN_PROJECT
【发布时间】:2020-01-15 01:31:09
【问题描述】:

我希望 pipenv 在$PROJECTDIR/.venv 中为签出项目的每个人自动创建它的 virtualenv。

到目前为止,我只看到以下选项有效,但没有一个是令人满意的:

  • 要求用户在全局范围内设置 PIPENV_VENV_IN_PROJECT=1,将我的项目首选项强制应用于他们的每个其他项目。
  • 要求用户在我的项目中始终通过“PIPENV_VENV_IN_PROJECT=1 pipenv”调用 pipenv,如果他们运行 pipenv 命令并忘记设置 PIPENV_VENV_IN_PROJECT,这会带来麻烦。
  • 要求用户安装第三方工具 direnv 并提供 .envrc 文件,添加另一个不明显的构建依赖项。

我尝试了以下方法:

  • 向 Pipfile 添加类似 PIPENV_VENV_IN_PROJECT 的选项,但我找不到任何此类 Pipfile 选项。
  • 将“PIPENV_VENV_IN_PROJECT=1”放入$PROJECTDIR/.env,但这仅在pipenv shell/run 的子shell 内进行评估,并被pipenv 本身忽略。

那么,如何在每个项目的基础上设置 PIPENV_VENV_IN_PROJECT?

【问题讨论】:

  • 出于好奇,从项目的角度定义虚拟环境的位置何时很重要?
  • @np8 目标受众是想要尝试构建该工具,但不太了解 Python 构建环境的复杂性的人。一个重要的期望是,在尝试了一些东西之后,删除项目目录应该足以删除该工具,而系统的其余部分没有任何剩余物,尤其是没有像虚拟环境这样消耗大量磁盘空间的剩余物。这只有在虚拟环境位于项目目录中时才有可能。

标签: python directory virtualenv project pipenv


【解决方案1】:

自己回答这个问题,确实是可以的!

短篇小说:

只需自己创建一个空的 .venv 目录。 Pipenv 会自动选择这个。

长篇大论:

请注意,pipenv 问题跟踪器中存在许多问题,这些问题给人一种错误的印象,即 pipenv 开发人员不想提供此功能。然而,这些问题只是描述了实现这一目标的其他方法,而这些额外的方法被拒绝了。

但在那一团糟中,有一条评论实际上很有帮助:

techalchemy 于 2018 年 12 月 12 日发表评论

你可以做的事情:

  1. 只需自己创建 .venv。 Pipenv 将使用它。
  2. 使用 direnv 之类的工具来激活每个目录的此设置
  3. 全局设置 envvar
  4. 在项目根目录中创建一个名为 .venv 的文件,其内容只是 virtualenv 根目录的路径

对于第 1 点和第 4 点,pipenv 会自动选择它

注意:如果您想使用当前 Debian/Stable (Buster) 附带的 pipenv,第 4 点将不起作用,因为此功能是在后来的 pipenv 版本中引入的.但是,第 1 点效果很好。对于 Python 3,这意味着:

python3 -m virtualenv -p python3 .venv
pipenv install ...  # resp. pipenv sync

【讨论】:

  • 拥有一个空的.venv 文件夹也可以!很好的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2022-12-14
  • 2017-03-14
相关资源
最近更新 更多