Python 如何在每个项目的基础上在项目中设置PIPENV_VENV_

Python 如何在每个项目的基础上在项目中设置PIPENV_VENV_,python,directory,virtualenv,project,pipenv,Python,Directory,Virtualenv,Project,Pipenv,我希望pipenv在$PROJECTDIR/.venv中为每个签出项目的人自动创建其virtualenv 到目前为止,我只看到以下选项有效,但没有一个是令人满意的: 要求用户全局设置PIPENV_VENV_IN_PROJECT=1,在他们的每个其他项目上强制设置我的项目首选项 在我的项目中,要求用户始终通过“pipenv\u-IN_-PROJECT=1 pipenv”调用pipenv,如果他们运行pipenv命令而忘记在_-PROJECT中设置pipenv\u,就会产生麻烦 要求用户安装第三方

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

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

  • 要求用户全局设置PIPENV_VENV_IN_PROJECT=1,在他们的每个其他项目上强制设置我的项目首选项
  • 在我的项目中,要求用户始终通过“
    pipenv\u-IN_-PROJECT=1 pipenv
    ”调用pipenv,如果他们运行
    pipenv
    命令而忘记在_-PROJECT中设置
    pipenv\u,就会产生麻烦
  • 要求用户安装第三方工具
    direnv
    ,并提供
    .envrc
    文件,添加另一个不明显的构建依赖项
我尝试了以下方法:

  • 向Pipfile添加一个类似PIPENV_VENV_IN_项目的选项,但我找不到任何这样的Pipfile选项
  • 将“
    PIPENV\u VENV\u IN_PROJECT=1
    ”放入
    $PROJECTDIR/.env
    中,但这只在
    PIPENV shell/run
    的子shell中进行评估,并且被
    PIPENV
    本身忽略

那么,我如何在每个项目的基础上设置项目中的PIPENV\u VENV\u?

我自己回答这个问题,这确实是可能的

短篇小说:

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

说来话长:

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

但在这场混乱中,有一条评论实际上很有帮助:

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

你可以做的事情:

  • 只需自己创建.venv。Pipenv将使用它
  • 使用像direnv这样的工具来激活每个目录的此设置
  • 全局设置环境变量
  • 在项目根目录中创建一个名为.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
    

    出于好奇,什么时候从项目的角度定义虚拟环境的位置才是重要的?@np8目标受众是那些想要尝试并构建该工具的人,但并不太喜欢Python构建环境的内部。一个重要的期望是,在尝试stuff之后,删除项目目录应该足以删除该工具,而不会在其系统的其余部分中留下任何剩余内容,特别是不会有像VirtualEnvs这样消耗大量磁盘空间的剩余内容。只有当虚拟环境位于项目目录中时,这才是可能的。只要有一个空的
    .venv
    文件夹也可以!伟大的解决方案!