经常遇到的 Pipenv 问题 — pipenv 文档

来自菜鸟教程
Pipenv/docs/v2020.11.4/diagnose
跳转至:导航、​搜索

经常遇到的 Pipenv 问题

Pipenv 正在不断被志愿者改进,但仍然是一个非常年轻的项目,资源有限,并且有一些需要处理的怪癖。 我们需要每个人的帮助(包括你的!)。

以下是人们在使用 Pipenv 时遇到的一些常见问题。 请查看以下内容,看看它们是否能解决您的问题。

笔记

首先确保您运行的是最新的 Pipenv 版本!


☤ 您的依赖项无法解析

确保您的依赖项实际上 do 解析。 如果您确信它们是,您可能需要清除解析器缓存。 运行以下命令:

pipenv lock --clear

然后再试一次。

如果这不起作用,请尝试手动删除整个缓存目录。 它通常是以下位置之一:

  • ~/Library/Caches/pipenv (macOS)
  • %LOCALAPPDATA%\pipenv\pipenv\Cache (Windows)
  • ~/.cache/pipenv(其他操作系统)

Pipenv 不安装预发布(即 带有 alpha/beta/etc 的版本。 后缀,例如 1.0b1)。 您需要在命令中传递 --pre 标志,或设置

[pipenv]
allow_prereleases = true

在你的 Pipfile 中。


☤ 没有命名的模块

这通常是将 Pipenv 与系统包混合的结果。 我们 强烈 建议在隔离环境中安装 Pipenv。 卸载所有现有的 Pipenv 安装,并参见 ☤ 安装 Pipenv 选择一种推荐的方式来安装 Pipenv。


☤ 找不到我安装的 pyenv 的 Python

确保正确设置了 PYENV_ROOT。 Pipenv 仅支持 CPython 发行版,版本名称类似 3.6.4 或类似名称。


☤ Pipenv 不尊重 pyenv 的全局和本地 Python 版本

Pipenv 默认使用它安装的 Python 来创建 virtualenv。 您可以设置 --python 选项,或 $PYENV_ROOT/shims/python 让它在选择解释器时咨询 pyenv。 有关详细信息,请参阅 ☤ 指定包的版本

如果想让 Pipenv 自动“做正确的事”,可以将环境变量 PIPENV_PYTHON 设置为 $PYENV_ROOT/shims/python。 这将使 Pipenv 默认使用 pyenv 的活动 Python 版本来创建虚拟环境。


☤ 值错误:未知区域设置:UTF-8

macOS 在其区域设置检测中存在一个错误,导致我们无法正确检测您的 shell 编码。 如果语言环境变量未指定编码,这也可能是其他系统上的问题。

解决方法是将以下两个环境变量设置为标准本地化格式:

  • LC_ALL
  • LANG

例如,对于 Bash,您可以将以下内容添加到 ~/.bash_profile

export LC_ALL='en_US.UTF-8'
export LANG='en_US.UTF-8'

对于 Zsh,要编辑的文件是 ~/.zshrc

笔记

您可以将 en_USUTF-8 部分更改为您使用的语言/区域设置和编码。


☤ /bin/pip: 没有那个文件或目录

这可能与您的语言环境设置有关。 有关可能的解决方案,请参阅 ☤ ValueError: unknown locale: UTF-8


☤ shell 没有在提示中显示 virtualenv 的名称

这是故意的。 您可以使用 shell 插件或巧妙的 PS1 配置自行完成。 如果你真的想要它回来,使用

pipenv shell -c

取而代之(在 Windows 上不可用)。


☤ Pipenv 不尊重 setup.py 中的依赖项

不,它不是故意的。 Pipfile 和 setup.py 用于不同的目的,默认情况下不应相互考虑。 有关更多信息,请参阅 ☤ Pipfile 与 setup.py


☤ 在Supervisor 程序中使用pipenv run

当你用 pipenv run ... 配置一个监督程序的 command 时,你需要正确设置 locale 环境变量以使其工作。

/etc/supervisor/supervisord.conf[supervisord] 部分下添加此行:

[supervisord]
environment=LC_ALL='en_US.UTF-8',LANG='en_US.UTF-8'

☤ 在 Locking dependencies... 期间引发异常

运行 pipenv lock --clear 并重试。 锁定序列缓存结果以加速后续运行。 如果错误导致格式损坏,即使在修复错误之后,缓存也可能包含错误结果。 --clear 刷新缓存,从而删除不良结果。