У меня есть один сценарий, в котором я пытаюсь выполнить
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?
Решение 1: установите python 3.6 и ln 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
pip3 install virtualenv
virtualenv --python=python3 venv
source venv/bin/activate
pip install pyyaml
python env/common_config/add_imagepullsecret.py
Решение 3: используйте pipenv
Попробуйте следующее:
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
Установить pyyaml
$ sudo pip3 установить pyyaml
это сработало для меня.
pip install pyyaml
Это должно служить цели
На тот случай, если ни одно из вышеперечисленных решений не подойдет вам, вот постоянное решение. скачать подходящую версию pyyaml, распаковать и установить.
Пример:
wget https://pyyaml.org/download/pyyaml/PyYAML-5.1.tar.gz
tar -xvzf PyYAML-5.1.tar.gz
cd PyYAML-5.1
sudo setup.py install
Примечание. Можно загрузить последнюю доступную версию, если вы не уверены в конкретной версии.
Проблема здесь связана с тем, что вы загрузили, скомпилировали и установили (более новую) версию 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
и использовать его для установки PyYAML.
Более структурное решение - никогда не устанавливать такой дополнительный 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.
Лучшей практикой разработчика является создание virtualenv для каждого проекта, который он создает. Это помогает вам поддерживать зависимости, изолированные от корневой конфигурации системы
Установка 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.
Приветствия :)