我使用pyenv为我的系统上的各种项目安装和管理不同版本的python和虚拟环境。但是pipenv现在是管理虚拟环境的推荐工具,我喜欢它的许多特性。在大多数情况下,一切都正常,但是pipenv在木星笔记本上似乎有漏洞或什么东西。下面是在我的机器上复制这个问题的步骤。
brew install pipenv安装pipenv。pyenv install 3.6.3安装一个新版本的Python,并通过pyenv global 3.6.3激活它。pip install jupyter requests。pipenv install创建一个pipenv项目pipenv shell激活pipenv虚拟环境。pip list安装在当前的虚拟环境中。(我只得到pip、setuptools和wheel。)jupyter notebook。我的期望是:控制台出现jupyter: command not found错误。实际:笔记本服务器和浏览器UI正常启动。import requests导入辅助包。我的期望是:抛出一个ModuleNotFoundError。实际:包是导入的,可以正常使用。如果我尝试在pipenv虚拟环境中导入辅助包,但在木星笔记本之外(在repl或Python中),我将得到一个预期的ModuleNotFoundError。所以问题就出在朱皮特身上。注意,如果我尝试使用pyenv虚拟环境而不是pipenv虚拟环境重新创建这个问题,那么就会发生预期的行为:jupyter notebook在控制台中生成一个jupyter: command not found错误。
我的问题是:我是以一种非故意的方式使用pipenv,还是有另一种使用pipenv的方法可以避免这个问题?
提前感谢!
发布于 2018-05-04 21:19:29
问题
在步骤1中,使用brew安装pipenv。pipenv的brew安装还安装了一个可直接使用的python环境。命令本身就在您的路径上,因此您可以独立于加载的虚拟环境调用它。
在步骤2中,您安装并加载了一个pyenv虚拟服务器。加载pyenv虚拟服务器会改变您的路径。现在使用pip时,它是pyenv 3.6.3 pip,它将安装到pyenv中。因此,在步骤3中,当您运行pip install jupyter requests时,它们将进入pyenv。
当您运行pipenv时,在步骤4中,它将使用它自己的python,因此它能够加载自己。然后,在步骤5中加载pipenv虚拟器,然后将用于该文件的bin文件夹添加到您的路径中,从而允许您运行所安装的东西。它不会撤销pyenv所做的更改。当您在步骤6中运行pip时,它会在这个pipenv中运行,从而打印出已安装的包的有限列表。
在步骤7中,您运行jupyter。这不是在pipenv虚拟器中,但是它在pyenv中。pyenv路径添加仍然存在,因此它是可运行的。jupyter命令是一个bash脚本,在运行之前它可以神奇地重置python路径。这就是如何在步骤8中找到requests模块的方法。
您终于运行了某种形式的python。这大概是在您的pipenv虚拟环境中,所以在该环境中的是加载模块。
解决方案
您需要卸载全局pyenv。由于您已经在3.6.3 python安装中安装了包,所以我也会清除您安装的任何虚拟版本和python版本。你可以重新安装它们。
你的pipenv安装很好,可以保留。它也是您应该使用的主要工具。您不应该需要直接执行pip或pyenv。
您应该将jupyter安装到中,然后应该有一个只有在加载时才能工作的安装。
https://stackoverflow.com/questions/50182498
复制相似问题