Использование gmsh API в python беспорядок с латексом matplotlib
Я уже довольно давно борюсь с этим, и я думаю, что сузил причину следующей проблемы:
Используя виртуальную среду Python 3.8 в Spyder через Anaconda, я смог построить все, что хотел; обширные и сложные сюжеты с использованием латексного шрифта palatino. Однако, как только я ввожу в него хоть немного кода gmsh, появляются ошибки вроде «не удалось найти латекс», «отсутствует файл метрик шрифта» или «dvipng не найден». Я могу только догадываться, что gmsh испортил каталоги, но sys.path показал, что все соответствующие папки (для исполняемых файлов Miktex, dvipng) все еще там. Я новичок в python, поэтому надеюсь, что вы, ребята, заметили какую-то очень глупую или основную ошибку, которую я сделал. Заранее спасибо!
Минимальный пример, который вызывает у меня проблему:
import gmsh, numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
#rc('font',**{'family':'serif','serif':['Palatino']})
rc('text', usetex=True) # usetex=False resolves the issue, but I NEED this font haha
if False: # If set to True, the errors will occur.
gmsh.initialize()
gmsh.finalize()
Y = np.random.random(15) + 2*np.random.rand(1)
plt.plot(Y)
plt.title(r'$\Sigma_1^2 \mathrm{somehillsboye}$')
PS Виртуальная среда настроена так:
Чтобы избежать конфликтов зависимостей из-за разных версий Python, в этом проекте используется Python 3.8. Активируйте его с помощью Anaconda, выполнив следующие действия:
- Запустите приложение Anaconda Navigator.
- В этом приложении запустите командную строку CMD.exe.
- В этом приглашении отдельно выполните следующие строки для python 3.8 и необходимых модулей (нажимая «y» после каждой «установки или создания»):conda create --name py38 python=3.8
conda активировать py38
установка conda --name py38 spyder -c conda-forge
conda config - добавить каналы conda-forge
conda установить libspatialindex ==1.9.3 rtree == 0.9.7
conda install numpy ==1.21.2 scipy ==1.6.2 matplotlib == 3.4.2
conda установить gmsh python-gmsh
conda install -c conda-forge / label / cf202003 miktex
conda установить ghostscript
Spyder
1 ответ
Я решил это!
Проблема кажется более общей, чем я думал, и я нашел здесь ответ:https://gitlab.onelab.info/gmsh/gmsh/-/issues/1142
Оказывается, gmsh.initialize() мешает окружению PATH и PYTHONPATH, потенциально скрывая каталог исполняемых файлов (например, miktex). Чтобы предотвратить проблему, просто измените:
gmsh.initialize()
к
gmsh.initialize(['-noenv'])