Это может быть по нескольким причинам.
matplotlib установлен как пользователь
Если вы установили matplotlib с pip install --user package
в другой учетной записи пользователя. Не ожидайте, что у другого пользователя будет доступен этот пакет, этого не произойдет.
Установите пакет с pip install package
, который будет доступен для всей системы, для всех пользователей.
Запись. В зависимости от вашей настройки c вам могут потребоваться повышенные разрешения.
matplotlib устанавливается в другую python версию
Независимо от того, как вы установили пакет (см. Выше), возможно, вы установили его в версии, отличной от той, которую пытаетесь запустить.
Чтобы убедиться, что вы можете импортировать пакет, как в python -m package
, используйте python -m pip install package
. Это гарантирует, что для установки используется тот же интерпретатор python, что и для выполнения.
Лучшие подходы
Еще один стандартный подход
Изучение и использование виртуальных сред. Они предназначены для установки интерпретатора python для каждого проекта, а не для системы. Позволяя вам сохранять зависимые пакеты изолированными от python пакетов вашей системы.
еще один более продвинутый подход
Я воспользуюсь возможностью поделиться небольшим Makefile, который обрабатывает эту чушь для меня. Управляет виртуальной средой в папке для разработки и обновляет ее с учетом того, какие пакеты установлены в requirements.txt
.
Вызов make test
достаточен для запуска набора тестов (или любой другой вещи, которую вы можете настроить) в среде с правильными пакетами.
.PHONY: test
# directory to store virtual environment
VENV_NAME=venv
# python runtime version
PYTHON_VER=3.7
# python executble
PYTHON=${VENV_NAME}/bin/python${PYTHON_VER}
# pip requirements file
REQUIREMENTS=requirements.txt
venv: ## Recreates the virtual environment if needed.
venv: $(VENV_NAME)/bin/activate
$(VENV_NAME)/bin/activate: ${REQUIREMENTS}
test -d $(VENV_NAME) || virtualenv -p python${PYTHON_VER} $(VENV_NAME)
${PYTHON} -m pip install -U pip
${PYTHON} -m pip install -r ${REQUIREMENTS}
touch $@
test: ## Runs the test suite.
test: venv
$(PYTHON) -m pytest tests