簡體   English   中英

無法在 Juypter Notebook 中導入 PyOpenCL

[英]Cannot import PyOpenCL in Juypter Notebook

我在安裝了 pyopencl 的 anacoda 環境中運行:

$> conda list | grep pyopencl
pyopencl                  2018.2.5         py37h9888f84_0    conda-forge

我從同一個窗口啟動:

$> anaconda3/bin/jupyter_mac.command

這是:

cat /Anaconda3/bin/jupyter_mac.command

DIR=$(dirname $0)

$DIR/jupyter-notebook

所以,現在我們正在運行一個筆記本。 當我嘗試導入 pyopencl 時:

import pyopencl as cl

我收到以下錯誤:

ModuleNotFoundError: No module named 'pyopencl'

我可以通過以下方式在同一個 shell 中本地運行這些示例而沒有任何錯誤:

$> python test6.py
Choose platform:
[0] <pyopencl.Platform 'Portable Computing Language' at 0x11512cf00>
[1] <pyopencl.Platform 'Apple' at 0x7f984cd1e010>
Choice [0]:1
Choose device(s):
[0] <pyopencl.Device 'Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz' on 'Apple' at 0x7f984cc1f090>
[1] <pyopencl.Device 'Intel(R) UHD Graphics 630' on 'Apple' at 0x7f984cc19370>
[2] <pyopencl.Device 'AMD Radeon Pro 560X Compute Engine' on 'Apple' at 0x7f984cc19390>
Choice, comma-separated [0]:2
Set the environment variable PYOPENCL_CTX='1:2' to avoid being asked again.
PASSED
[-0.13433748]
[-0.13433748]

任何幫助表示贊賞! 謝謝。

背景

我設法重現了這種行為:

  • Win 上- 但這應該不是問題,因為(我認為) OSX上的事情是一樣的
  • 來自(當前) Anaconda環境的PythonAnaconda的默認環境(對應於基礎環境)是不同的。 如果不是這種情況,則答案(或部分答案)可能不正確。 請注意,我將要引用的只有 2 個Python它們都是Anaconda內部的(即使Anaconda “關鍵字”不存在)
  • 我在測試場景中使用了PyGraphviz (而不是PyOpenCL

代碼0.py

#!/usr/bin/env python3

import sys
import os
import pprint


print(f"Python Executable: {sys.executable}")
print(f"Version {sys.version} on {sys.platform}\n")

conda_env_var = "CONDA_DEFAULT_ENV"
conda_env = os.environ[conda_env_var]
print(f"{conda_env_var}: {conda_env}\n")

sys_path = pprint.pformat(sys.path)
print(f"sys.path: {sys_path}\n")

path_var = "PATH"
env_path = pprint.pformat([item for item in os.environ[path_var].split(os.pathsep) if item.find(conda_env) > -1])
print(f"os.environ[\"{path_var}\"] (relevant): {env_path}\n")

import pygraphviz
print(pygraphviz)

輸出

 (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> python code0.py Python Executable: E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\envs\\py_064_030701_test0\\python.exe Version 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] on win32 CONDA_DEFAULT_ENV: py_064_030701_test0 sys.path: ['e:\\\\Work\\\\Dev\\\\StackOverflow\\\\q055251357', 'E:\\\\Work\\\\Dev\\\\Utils', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\python37.zip', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\DLLs', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\lib', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\lib\\\\site-packages'] os.environ["PATH"] (relevant): ['E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\Library\\\\mingw-w64\\\\bin', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\Library\\\\usr\\\\bin', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\Library\\\\bin', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\Scripts', 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\bin'] <module 'pygraphviz' from 'E:\\\\Install\\\\x64\\\\Anaconda\\\\Anaconda\\\\2018.12\\\\envs\\\\py_064_030701_test0\\\\lib\\\\site-packages\\\\pygraphviz\\\\__init__.py'> (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> where jupyter-notebook E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Scripts\\jupyter-notebook.exe (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> jupyter-notebook [I 01:16:10.345 NotebookApp] JupyterLab extension loaded from E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\lib\\site-packages\\jupyterlab [I 01:16:10.346 NotebookApp] JupyterLab application directory is E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\share\\jupyter\\lab [I 01:16:10.349 NotebookApp] Serving notebooks from local directory: e:\\Work\\Dev\\StackOverflow\\q055251357 [I 01:16:10.350 NotebookApp] The Jupyter Notebook is running at: [I 01:16:10.352 NotebookApp] http://localhost:8888/?token=14412a6d6d0c895d059a86bcd71e10cbface4a479c5843c2 [I 01:16:10.353 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 01:16:10.437 NotebookApp] To access the notebook, open this file in a browser: file:///C:/Users/cfati/AppData/Roaming/jupyter/runtime/nbserver-24700-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=14412a6d6d0c895d059a86bcd71e10cbface4a479c5843c2 [I 01:17:18.569 NotebookApp] 302 GET /?token=14412a6d6d0c895d059a86bcd71e10cbface4a479c5843c2 (::1) 0.98ms [I 01:17:25.161 NotebookApp] Creating new notebook in [I 01:17:26.147 NotebookApp] Kernel started: 8b702b2d-97d0-40e3-bbca-42107efd1de5 [I 01:17:27.186 NotebookApp] Adapting to protocol v5.1 for kernel 8b702b2d-97d0-40e3-bbca-42107efd1de5

同樣的腳本運行到Jupyter Notebook 中

圖像0

正如所見,它失敗了,這是因為它是由Anaconda的默認Python (它沒有安裝包)運行的。 看了一下,注意到jupyter-notebook可執行文件在jupyter-notebook-script.py (來自同一目錄)上啟動( Anaconda的默認) Python

可能的解決方案:

1. 在主Python 中安裝缺少的包

這是第1是來到我的腦海:安裝PyGraphviz(和所有其他所需的)。 沒試過,但應該可以 之所以沒有嘗試,是因為我反對用包污染主要的Python 但是,由於它已經包含了大量的site-packages ,事情是有爭議的。

2.將當前環境Python注冊為內核

我試圖讓jupyter-notebook啟動當前環境Python安裝,使用其配置,或更改%CONDA_PYTHON_EXE% ,但沒有成功(請注意,這是我一次使用Jupyter )。 無論如何,經過一些調查,我意識到jupyter-notebook可執行文件會啟動安裝了JupyterPython 。這是一種常用技術,它是通過將Python路徑硬編碼到可執行文件中來完成的(雖然奇怪的是,用十六進制編輯器查看它並沒有沒找到)。

在搜索時,我遇到了[SO]:Changing Python Executable (@Matt's answer)並從那里到[ReadTheDocs.IPython]: Installation the IPython kernel ,並了一下:

 py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> where pip E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\envs\\py_064_030701_test0\\Scripts\\pip.exe E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Scripts\\pip.exe (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> pip freeze certifi==2019.3.9 pygraphviz==1.5 wincertstore==0.2 (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> pip install ipykernel Collecting ipykernel ... # Some pip useless output ... Installing collected packages: tornado, colorama, six, ipython-genutils, decorator, traitlets, backcall, pygments, pickleshare, wcwidth, prompt-toolkit, parso, jedi, ipython, jupyter-core, python-dateutil, pyzmq, jupyter-client, ipykernel Successfully installed backcall-0.1.0 colorama-0.4.1 decorator-4.4.0 ipykernel-5.1.0 ipython-7.4.0 ipython-genutils-0.2.0 jedi-0.13.3 jupyter-client-5.2.4 jupyter-core-4.4.0 parso-0.3.4 pickleshare-0.7.5 prompt-toolkit-2.0.9 pygments-2.3.1 python-dateutil-2.8.0 pyzmq-18.0.1 six-1.12.0 tornado-6.0.2 traitlets-4.3.2 wcwidth-0.1.7 (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> where python E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\envs\\py_064_030701_test0\\python.exe E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\python.exe (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> python -m ipykernel install --name %CONDA_DEFAULT_ENV% Installed kernelspec py_064_030701_test0 in C:\\ProgramData\\jupyter\\kernels\\py_064_030701_test0

啟動它並選擇新創建的內核(如下圖所示)后一切正常。

圖像1

這基本上是@AndrásNagy 在他的回答中也解釋的內容。

雖然這是我一開始的第一個選擇,但使用當前環境Python將其元數據寫入主Python (以及其他Python不一定在Anaconda內部)可以從中讀取它的位置,對我來說似乎並不那么簡單(盡管這可能是推薦的方法)。

3.在當前環境Python中安裝Jupyter

一開始我也想到了這個,但是因為之前的方法我沒有馬上想到。 我認為Jupyter有很多依賴項(這是真的),但IPyKernel也是如此。 但是,現在我認為這是最簡單的方法。

 (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> pip install jupyter Collecting jupyter ... # Some pip useless output ... Installing collected packages: qtconsole, testpath, defusedxml, entrypoints, webencodings, bleach, mistune, MarkupSafe, jinja2, pandocfilters, attrs, pyrsistent, jsonschema, nbformat, nbconvert, Send2Trash, prometheus-client, pywinpty, terminado, notebook, widgetsnbextension, ipywidgets, jupyter-console, jupyter Successfully installed MarkupSafe-1.1.1 Send2Trash-1.5.0 attrs-19.1.0 bleach-3.1.0 defusedxml-0.5.0 entrypoints-0.3 ipywidgets-7.4.2 jinja2-2.10 jsonschema-3.0.1 jupyter-1.0.0 jupyter-console-6.0.0 mistune-0.8.4 nbconvert-5.4.1 nbformat-4.4.0 notebook-5.7.8 pandocfilters-1.4.2 prometheus-client-0.6.0 pyrsistent-0.14.11 pywinpty-0.5.5 qtconsole-4.4.3 terminado-0.8.2 testpath-0.4.2 webencodings-0.5.1 widgetsnbextension-3.4.2 (py_064_030701_test0) [cfati@CFATI-5510-0:e:\\Work\\Dev\\StackOverflow\\q055251357]> where jupyter-notebook E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\envs\\py_064_030701_test0\\Scripts\\jupyter-notebook.exe E:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Scripts\\jupyter-notebook.exe

不用說,啟動jupyter-notebook注意它是一個不同的可執行文件)就成功了(因為安裝Jupyter也會將Python安裝注冊為內核)。

我想我和你有同樣的問題! 我有一個問題,當我從 conda 環境啟動 jupyter notebook 時,anaconda 環境內核沒有出現在我的 jupyter notebook 中!

請考慮以下事項:

conda activate YourEnvironmentName
pip install ipykernel 
python -m ipykernel install --user --name=YourEnvironmentName

希望在此之后,您將能夠使用以下命令啟動您的 Jupyter Notebook

jupyter notebook --ip=0.0.0.0 --port=8080

並從安裝 pyopencl 的內核列表中選擇 conda 環境

我有一個類似的問題,我創建了一個 conda 環境,激活了環境,安裝了一堆包,然后將內核添加到 ipython,但安裝的包無法加載,我收到了導入錯誤。

解決方案:新內核指向錯誤的 python 可執行文件(對於基礎環境)。 我必須編輯 kernel.json 文件以指向適當環境中的 python 可執行文件。 這是“argv”數組中的第一個字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM