如何在每个项目的基础上设置 PIPENV_VENV_IN_PROJECT

vog*_*vog 12 python directory project virtualenv pipenv

我希望 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,并且会被pipenv自身忽略。

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

vog*_*vog 23

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

短篇故事:

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

很长的故事:

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

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

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

你可以做的事情:

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

对于第 1 点和第 4 点, pipenv 将自动拾取

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

python3 -m virtualenv -p python3 .venv
pipenv install ...  # resp. pipenv sync
Run Code Online (Sandbox Code Playgroud)

  • 只需有一个空的“.venv”文件夹也可以!很好的解决方案! (4认同)