jupyter的多版本python 3(3.6和3.7)选择了错误的站点包

jupyter的多版本python 3(3.6和3.7)选择了错误的站点包,python,ipython,jupyter-notebook,pipenv,pyenv,Python,Ipython,Jupyter Notebook,Pipenv,Pyenv,我已经在我的办公桌上敲了三天了,我不知道该怎么办,所以如果你知道发生了什么,请告诉我 问题:当我使用注册内核(虚拟环境中安装的ipykernel)运行全局安装(虚拟环境之外)的jupyter笔记本时,其中虚拟环境中的python3-V为3.6.4,全局python3-V为3.7.0,jupyter笔记本(从活动的venv中运行)激活venv内核时崩溃,因为它试图从全局python 3.7.0获取站点包 [I 11:11:13.221 NotebookApp] Serving notebooks

我已经在我的办公桌上敲了三天了,我不知道该怎么办,所以如果你知道发生了什么,请告诉我

问题:当我使用注册内核(虚拟环境中安装的ipykernel)运行全局安装(虚拟环境之外)的jupyter笔记本时,其中虚拟环境中的python3-V为3.6.4,全局python3-V为3.7.0,jupyter笔记本(从活动的venv中运行)激活venv内核时崩溃,因为它试图从全局python 3.7.0获取站点包

[I 11:11:13.221 NotebookApp] Serving notebooks from local directory: /Users/cap/Desktop/Projects/lastresort
[I 11:11:13.221 NotebookApp] 0 active kernels
[I 11:11:13.221 NotebookApp] The Jupyter Notebook is running at:
[I 11:11:13.221 NotebookApp] http://localhost:8888/?token=cc92b513df1e586ce592bfc4fe641b9f2d76fdde480c6f07
[I 11:11:13.221 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 11:11:13.222 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=cc92b513df1e586ce592bfc4fe641b9f2d76fdde480c6f07&token=cc92b513df1e586ce592bfc4fe641b9f2d76fdde480c6f07
[I 11:11:13.438 NotebookApp] Accepting one-time-token-authenticated connection from ::1
[I 11:11:16.385 NotebookApp] Kernel started: 2ad09f31-36f6-48cf-b859-7f78fdb6adb8
[I 11:11:17.014 NotebookApp] Adapting to protocol v5.1 for kernel 2ad09f31-36f6-48cf-b859-7f78fdb6adb8
[I 11:11:19.398 NotebookApp] Starting buffering for 2ad09f31-36f6-48cf-b859-7f78fdb6adb8:cda1e6c165f3482482d80df7d2664e9b
[I 11:11:19.609 NotebookApp] Kernel shutdown: 2ad09f31-36f6-48cf-b859-7f78fdb6adb8
[I 11:11:19.630 NotebookApp] Kernel started: 9b90f202-97bf-43b1-ba50-64d6a1323405
Traceback (most recent call last):
  File "/Users/cap/.pyenv/versions/3.6.4/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/Users/cap/.pyenv/versions/3.6.4/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/lib/python3.7/site-packages/ipykernel_launcher.py", line 15, in <module>
    from ipykernel import kernelapp as app
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/lib/python3.7/site-packages/ipykernel/__init__.py", line 2, in <module>
    from .connect import *
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/lib/python3.7/site-packages/ipykernel/connect.py", line 18, in <module>
    import jupyter_client
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/lib/python3.7/site-packages/jupyter_client/__init__.py", line 4, in <module>
    from .connect import *
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/lib/python3.7/site-packages/jupyter_client/connect.py", line 23, in <module>
    import zmq
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/__init__.py", line 47, in <module>
    from zmq import backend
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/backend/__init__.py", line 40, in <module>
    reraise(*exc_info)
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/utils/sixcerpt.py", line 34, in reraise
    raise value
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/backend/__init__.py", line 27, in <module>
    _ns = select_backend(first)
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/backend/select.py", line 26, in select_backend
    mod = __import__(name, fromlist=public_api)
  File "/usr/local/Cellar/jupyter/1.0.0_5/libexec/vendor/lib/python3.7/site-packages/zmq/backend/cython/__init__.py", line 6, in <module>
    from . import (constants, error, message, context,
ImportError: cannot import name 'constants'
  • 启动虚拟环境

      > pipenv shell 
      > python3 -V
      > Python 3.6.4 # I have validated in another shell that global is still 3.7
    
      > pyenv which python3
      > /Users/cap/.pyenv/versions/3.6.4/bin/python3
    
  • 安装ipykernel并安装

      > pipenv install ipykernel
      > ipython kernel install --user --name=lastresort-yyl8tfk8 --display-name "Python (lastresort-yyl8tfk8)"
    
  • 检查jupyter是否看到了新内核(注意:我仍然在venv中)

  • 运行jupyter笔记本并选择内核
    jotebook运行正常,但当我进入并选择Python(lastresort-yyl8tfk8)时,内核重新启动以加载lastresort-yyl8tfk8内核,我从上面得到了错误,它与3.7中的站点包混淆了

  • 我尝试了很多关于路径的方法。我甚至还采用了ipython配置文件更改,例如:

    我真的需要一些帮助,至少有一个解决这个问题的方向

    我的最终目标很简单:
    能够拥有多个版本的python和相应的ipykernels,在向jupyter注册后,我可以从它们的虚拟环境中运行它们,其中jupyter安装是全局的。通过这种方式,我可以使用venvs for packages将我的代码和笔记本保存在他们的项目文件夹中。其实很简单,我只是不知道自己搞砸了什么

    提前谢谢大家

    更新: 我刚刚验证了,如果我删除了global jupyter笔记本并将其安装在venv中,它会正常工作。我没想到它不会,但还是

    更新: 这似乎是一些蟒蛇的恶作剧,但我不知道如何修复它

    更新: 尝试按照注释中的建议使用python-m运行,但结果相同。出于某种原因,当我使用激活的虚拟环境(在ipython中正确设置了python3.6)调用jupyter笔记本(安装在虚拟环境之外)时,它不会调用正确的3.6站点包

    我见过很多人使用这种设置。我真的不知道该怎么办。

    TLDR 对我来说,它可以在由
    pipenv
    创建的虚拟环境中使用以下命令安装
    jupyter

    pipenv run pip install jupyter
    
    太短了,想看书! 我在python 3版本中也遇到了同样的问题,因此我开始使用如您所示的
    pipenv
    ,使用一个简单的
    Pipfile
    配置,如下所示:

    [[source]]
    name = "pypi"
    url = "https://pypi.org/simple"
    verify_ssl = true
    
    [dev-packages]
    
    [packages]
    numpy = "*"
    pandas = "*"
    matplotlib = "*"
    
    [requires]
    python_version = "3.7"
    
    
    我认为,当我在配置文件中将python版本指定为3.7时,每当我想运行
    pipenv run jupyter notebook
    ,内核都会在python 3.7下运行。。。 但当导入时,笔记本上显示的librares:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    我得到了“非模块安装错误”
    ModuleNotFoundError:没有名为“matplotlib”的模块

    然后在同一个笔记本中,我检查了内核运行的版本,代码如下:

    import sys
    
    print(sys.version)
    
    输出显示它是在Python3.6下运行的,因此在该版本中我没有安装这些模块,因为
    pipenv
    正在为3.7版本安装它们

    因此,我尝试再次安装jupyter,但这次是在由
    pipenv
    创建的虚拟环境下,使用
    run
    命令和
    pip
    工具:

    pipenv run pip install jupyter
    

    这对我有用

    要使
    pipenv
    在从任何所需路径运行时使用所需的
    Pipfile
    ,应将以下env变量添加到
    ~/.bashrc
    ~/.profile
    中:

    export PIPENV_PIPFILE="<path_to_the_Pipefile_you_want>"
    
    export PIPENV\u PIPFILE=“”
    

    否则,
    pipenv
    将尝试使用运行路径中的
    Pipefile

    尝试将命令作为可运行模块运行,使用
    -m
    开关:
    python-m pip install
    python-m jupyter notebook
    等。一旦运行了正确的python版本,这将使您有更好的机会使用正确的pip、jupyter等。如果存在PYTHONPATH集,请尝试将其取消设置(可能在将其值复制到文本文件作为备份后)。使用上述命令,您不需要PYTHONPATH。请立即尝试这些命令。非常感谢。当连接到jupyter控制台时,我也遇到同样的问题。但是,如果我切换到venv并执行jupyter内核--kernel=,那么我就可以使用提供的运行时内核连接到控制台。
    import sys
    
    print(sys.version)
    
    pipenv run pip install jupyter
    
    export PIPENV_PIPFILE="<path_to_the_Pipefile_you_want>"