ImportError: нет модуля с именем «yaml»

У меня есть один скрипт, в котором я пытаюсь выполнить

python3 env/common_config/add_imagepullsecret.py

Но я получаю следующую ошибку:

 [root@kevin]# python3 env/common_config/add_imagepullsecret.py
 Traceback (most recent call last):
 File "env/common_config/add_imagepullsecret.py", line 4, in <module>
 import yaml
 ImportError: No module named 'yaml'
 [root@kevin]# pip3 install pyyaml
 Requirement already satisfied: pyyaml in /usr/lib64/python3.4/site-packages 
 (3.12)
 [root@kevin]#

PyYAML уже установлен на машине:

 [root@bhimsvm31 k8s]# pip3 install pyyaml
 Requirement already satisfied: pyyaml in /usr/lib64/python3.4/site-packages 
 (3.12)
 [root@bhimsvm31 k8s]#

Как я могу заставить этот скрипт импортировать PyYAML?


person Neeraj    schedule 15.06.2018    source источник
comment
Запустите which для каждого из python3 и pip3, чтобы убедиться, что они указывают на одну и ту же версию, вы также можете попробовать python3 -m pip install pyyaml   -  person will7200    schedule 15.06.2018
comment
@ will7200 Это мой o/p: какой pip3 -- /usr/bin/pip3 какой python -- /usr/local/bin/python   -  person Neeraj    schedule 15.06.2018
comment
pip3 указывает на другой python3. Используйте python3 -m pip install pyyaml, это гарантирует, что он использует правильный pip для этой версии Python.   -  person will7200    schedule 15.06.2018
comment
И еще одно наблюдение: когда я использую интерфейс командной строки python2.7 и выполняю импорт yaml, я не получаю никаких ошибок. Но при использовании python3 или любой другой версии CLI и выполнении импорта yaml - я получаю сообщение ImportError: нет имен модулей 'yaml'   -  person Neeraj    schedule 15.06.2018
comment
Каждая версия Python требует установки yaml независимо от другой установленной версии Python. Он также должен быть установлен с использованием правильного пункта, указывающего на эту версию Python.   -  person will7200    schedule 15.06.2018
comment
Я пытаюсь выполнить команду python3 -m pip install pyyaml, но она говорит /usr/local/bin/python3: нет модуля с именем pip. Похоже, мой python3 установлен в /usr/local/bin, а pip/pip3 установлен в /usr/bin.   -  person Neeraj    schedule 15.06.2018
comment
Теперь проблема в том, что исполняемый файл python3 находится как в /usr/local/bin, так и в /usr/bin. И когда я делаю какой python3, я получаю /usr/local/bin/python3 . Как я могу изменить так, чтобы python3 указывал на /usr/bin/python3.   -  person Neeraj    schedule 15.06.2018
comment
Посмотрите на свой путь, какой бы префикс ни был первым, он будет местом его выполнения. Изменить порядок. Действительно, хотя idk, почему у вас есть две установки. Ознакомьтесь с установками brew для python. Возможно поможет удаление и переустановка.   -  person will7200    schedule 15.06.2018
comment
@ will7200 .. Спасибо, изменение порядка сработало.   -  person Neeraj    schedule 15.06.2018


Ответы (7)


pip install pyyaml

Это должно служить цели

person illusionx    schedule 11.07.2019
comment
На случай, если другие столкнутся с проблемой, что команда «pip» не найдена, мне пришлось изменить ее на pip3 install pyyaml - person Keara; 18.06.2020
comment
в качестве альтернативы используйте pipenv - сейчас это невероятно - person Nathan Benton; 24.03.2021

Решение 1: установите python 3.6 (или используйте pyenv для управления версией py) и подключите к нему python3.

export $PYPATH=`which python3`
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar -Jxf Python-3.6.5.tar.xz
cd Python-3.6.5/
./configure && make && make altinstall
rm $PYPATH
ln -s `which python3.6` $PYPATH
python3 -m pip install pyyaml
python3 env/common_config/add_imagepullsecret.py

Решение 2: используйте virtualenv (или python -m venv)

pip3 install virtualenv
virtualenv --python=python3 venv
source venv/bin/activate
pip install pyyaml
python env/common_config/add_imagepullsecret.py

Решение 3: используйте python-poetry или pipenv

https://github.com/python-poetry/poetry

https://github.com/pypa/pipenv

person Waket Zheng    schedule 15.06.2018

Попробуйте следующее:
1. удалите python-yaml и его зависимости.

$ sudo apt-get remove python3-yaml
$ sudo apt-get remove --auto-remove python3-yaml

Очистка вашей конфигурации/данных тоже.

$ sudo apt-get purge python3-yaml
$ sudo apt-get purge --auto-remove python3-yaml
  1. Установить пиамл

    $ sudo pip3 установить pyyaml

это сработало для меня.

person chitresh    schedule 06.02.2019
comment
Почему? Что здесь происходит? - person dumbledad; 03.02.2021

Лучшей практикой разработчика является создание virtualenv для каждого проекта, который он создает. Это поможет вам поддерживать зависимости, изолированные от корневой конфигурации системы.

Установка виртуальной среды

cd /*desired*/
mkdir myProject
pip install virtualenv -p python3 . #For python 3
pip install virtualenv -p python2 . #For python 2
pip install pyyaml

pip freeze > requirements.txt

После этого вы сможете увидеть текстовый документ, содержащий все зависимости, которые вы установили в файле virtualenv.

Ваше здоровье :)

person Vivek    schedule 15.06.2018

В моем случае это было вызвано "#! /usr/bin/env python" в скрипте bash. даже с /Library/Frameworks/Python.framework/Versions/3.8/bin в начале моего PATH env не нашел v 3.8, а вместо этого по умолчанию использовал v 2.7 из /usr/bin, в котором не было PyYAML.

Мое решение состояло в том, чтобы изменить сценарий для явного вызова python3, но вы также можете поместить символическую ссылку в каталог 3.8 bin, чтобы он находил python.

person Michael Croft    schedule 29.01.2020

Проблема здесь возникает из-за того, что вы загрузили, скомпилировали и установили (более новую) версию python3 на машину, на которой менеджер пакетов установил более старую версию python3. Последний имеет и связанный с ним pip3 первого нет. Вы можете убедиться в этом, выполнив /usr/local/bin/python3 --version и /usr/bin/python3 --version

Из-за этого, когда вы делаете pip3 install pyyaml, вы добавляете пакет PyYAML в старый пакет Python3. Когда вы делаете:

/usr/bin/python3 env/common_config/add_imagepullsecret.py

все должно работать, если только вы не полагаетесь на какую-то функцию нового python3.

Более структурное решение — установить pip для более новой версии python3 и использовать ее для установки ПиЯМЛ.

Более структурное решение состоит в том, чтобы никогда не устанавливать такие дополнительные python3 на вашем пути, но, например. в /opt/python/3.7.0 используйте virtualenv -p /opt/python/3.7.0/bin/python /opt/util/yourutil, установите каждый пакет с /opt/util/yourutil/bin/pip3 install package_name, а затем выполните:

/opt/util/yourutil/bin/python env/common_config/add_imagepullsecret.py

для запуска вашей программы. С помощью нескольких вспомогательных скриптов/функций/псевдонимов/ссылок это можно сделать очень эффективно, не загрязняя ни системноеpython3` «установочное пространство», ни ваш PATH.

person Anthon    schedule 15.06.2018

В случае использования conda вы можете:

 conda install -c anaconda pyyaml 

person cenestpamoi    schedule 20.07.2021