Использование matplotlib.pyplot для создания фигуры работает в локальном проекте Python, но в лабораторной среде Jupyter с тем же кодом это приводит к гибели ядра.
В более старых проблемах предлагалось понизить версию freetype с 2.11 до 2.10.
Но я использую версию 2.12.1 как в версии проекта pycharm, так и в версии de jupyter, но одна работает, а другая нет. похоже, это не решение.
Другие также предложили попробовать:
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
Это тоже было не решение
мой код:
import tensorflow as tf
import pathlib
import matplotlib.pyplot as plt
import numpy as np
batch_size = 32
img_height = 180
img_width = 180
data_dir = pathlib.Path("./data_dir").with_suffix('')
output_dir = pathlib.Path("./ds_out").with_suffix('')
ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
labels='inferred',
image_size=(img_height, img_width),
batch_size=batch_size)
class_names = ds.class_names
print(class_names)
ds.save(str(output_dir))
loaded_ds = tf.data.Dataset.load(str(output_dir))
plt.figure(figsize=(10, 10))
for images, labels in loaded_ds.take(1):
for i in range(9):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8"))
plt.title(class_names[labels[i]])
plt.axis("off")
plt.show()
Редактировать: Я попробовал более простой пример в новом блокноте:
# importing matplotlib module
from matplotlib import pyplot as plt
# x-axis values
x = [5, 2, 9, 4, 7]
# Y-axis values
y = [10, 5, 8, 4, 2]
# Function to plot
plt.plot(x, y)
# function to show the plot
plt.show()
Это также убивает ядро, если я не удалю обе эти строки:
# Function to plot
plt.plot(x, y)
# function to show the plot
plt.show()
Не думал, что это актуально, поскольку работает в обычном проекте pycharm. но все равно обновил вопрос, чтобы быть уверенным
Используете ли вы %matplotlib inline
в Jupyter (например, после import matplotlib.pyplot as plt
)? В противном случае он, возможно, попытается открыть новое окно, а из браузера просто не сможет.
Я попробовал это, но это не имело никакого значения ни для моего кода, ни для упрощенного примера.
А что если нет plt.show()
? В клетках Юпитера это не обязательно.
простой пример теперь возвращает [<matplotlib.lines.Line2D at 0x28f1e137810>]
, а затем ядро все равно умирает. В моем собственном коде ядро все равно просто умирает. Пробовал и с и без %matplotlib inline
Что конкретно вы подразумеваете под словами «Использование matplotlib.pyplot для создания фигуры работает в локальном проекте Python, но в лабораторной среде Jupyter»? Вы запускаете это не локально? Где? Что вы подразумеваете под «лабораторной средой Jupyter»? О каких версиях речь? Ваш простой пример кода отлично работает в JupyterLab версии 3.4.8 и JupyterLab версии 4.1.5. Я могу указать вам сеансы, обслуживаемые через службу MyBinder, где она работает нормально. Таким образом, это не является общим, и вам нужно посмотреть на свое окружение. Как вы установили JupyterLab? Раньше это работало?
да, технически они оба работают локально. Я хотел сказать, что код не запускается в лабораторном блокноте Jupyter. но когда я скопировал его в проект pycharm, он запустился. Он никогда не запускался в ноутбуке, я установил jupyterlab с помощью pip
Ни одно из обычных исправлений мне не помогло, поэтому я решил попробовать еще раз.
Я создал новый venv и на его основе новое ядро ipython и использовал это ядро в jupyterlab.
Проблема решена путём обхода старого ядра, но странно, что я сделал одно и то же дважды и на одном всё работает, а на другом нет.
Возможно, виноват ваш код. Пожалуйста, покажи это