【问题标题】:pipenv + pyenv + jupyterpipenv + pyenv + jupyter
【发布时间】:2018-05-04 20:17:18
【问题描述】:

我使用 pyenv 为我系统上的各种项目安装和管理不同版本的 python 和虚拟环境。但是 pipenv 现在是管理虚拟环境的推荐工具,我喜欢它的很多功能。大部分情况下一切正常,但是当涉及到 Jupyter 笔记本时,pipenv 似乎存在泄漏或其他问题。以下是在我的机器上复制问题的步骤。

  1. 使用 brew install pipenv 安装 pipenv。
  2. 使用 pyenv install 3.6.3 安装新版本的 Python,并通过 pyenv global 3.6.3 激活它。
  3. 安装 Jupyter notebook 和另一个包,例如pip install jupyter requests
  4. 创建一个新目录并导航到它;使用pipenv install 创建一个 pipenv 项目
  5. 使用 pipenv shell 激活 pipenv 虚拟环境。
  6. 不要安装任何包,并使用pip list 确认当前virtualenv 中没有安装任何包。 (我只得到pipsetuptoolswheel。)
  7. 运行jupyter notebook。我的期望:控制台出错jupyter: command not found。实际:笔记本服务器和浏览器 UI 正常启动。
  8. 创建一个新笔记本并从第 3 步导入辅助包:import requests。我的期望:抛出ModuleNotFoundError。实际:包已经导入,可以正常使用了。

如果我尝试在 pipenv 虚拟环境中但在 Jupyter 笔记本之外(在 repl 或 Python 脚本中)导入辅助包,我会按预期得到一个 ModuleNotFoundError。所以不知何故,问题出在 jupyter 上。请注意,如果我尝试使用 pyenv 虚拟环境而不是 pipenv 虚拟环境重新创建此问题,则会发生预期的行为:jupyter notebook 在控制台中产生jupyter: command not found 错误。

我的问题是:我是否以非预期的方式使用 pipenv,或者是否有其他使用 pipenv 的方法可以避免这个问题?

提前致谢!

【问题讨论】:

  • 我怀疑这是与 pyenv 全局命令和 pipenv 的交互。使用 pipenv 时,您不需要激活 pyenv。

标签: python jupyter-notebook pyenv pipenv


【解决方案1】:

问题

在第 1 步中,您使用 brew 安装 pipenv。 pipenv 的 brew 安装还安装了一个直接使用的 python 环境。命令本身在您的路径上,因此您可以独立于已加载的 virtualenv 调用它。

在第 2 步中,您安装并加载 pyenv virtualenv。加载 pyenv virtualenv 会改变你的路径。当您现在使用 pip 时,它是 pyenv 3.6.3 pip,它将安装到该 pyenv 中。因此,当您在第 3 步中运行 pip install jupyter requests 时,它们会进入 pyenv virtualenv。

当您运行pipenv 时,在第4 步中,它将使用它自己的python,因此它能够自行加载。您在步骤 5 中加载 pipenv virtualenv 然后将 bin 文件夹添加到您的路径中,允许您运行您安装的东西。它不会撤消 pyenv 所做的更改。当您在第 6 步中运行 pip 时,它会在此 pipenv virtualenv 中运行,因此会打印有限的已安装软件包列表。

在第 7 步中,您运行 jupyter。这不在 pipenv virtualenv 内部,但它在 pyenv 内部。 pyenv 路径添加仍然存在,因此它是可运行的。 jupyter 命令是一个 bash 脚本,它可以在运行之前重置 python 路径。这就是它如何在第 8 步中找到 requests 模块的方式。

你终于运行了某种形式的 python repl。这可能在您的 pipenv virtualenv 中,因此它会加载该环境中的模块。

解决方案

您需要卸载全局 pyenv。由于您已将软件包安装到 3.6.3 python 安装中,因此我还将清除您已安装的所有 virtualenvs 和 python 版本。您可以重新安装它们。

您安装的 pipenv 很好,可以保留。它也是您应该使用的主要工具。您不需要直接执行pippyenv

您应该将 jupyter 安装到 pipenv virtualenv 中,然后您应该进行安装,该安装仅在加载 pipenv virtualenv 时才有效。

【讨论】:

  • 如果我不能直接使用pyenv,我该如何安装特定版本的python,因为pipenv的文档明确指出我应该使用“已经安装”的python。第 22 条。
  • @Ashnur Pipenv docs 触摸使用 pyenv。
猜你喜欢
  • 2018-12-14
  • 2023-01-26
  • 1970-01-01
  • 2020-02-21
  • 2021-04-06
  • 2017-05-25
  • 1970-01-01
相关资源
最近更新 更多