web-dev-qa-db-fra.com

ImportError: Aucun module nommé 'yaml'

J'ai un script dans lequel j'essaye d'exécuter 

python3 env/common_config/add_imagepullsecret.py

Mais j'obtiens l'erreur suivante:

 [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 est déjà installé sur la machine:

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

Comment puis-je obtenir ce script pour importer PyYAML?

1
Neeraj

Solution 1: installez python 3.6 et 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

Solution 2: utilisez virtualenv

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

Solution 3: utilisez pipenv

https://docs.pipenv.org/

2
Waket Zheng

Il est recommandé aux développeurs de créer un fichier virtualenv pour chaque projet qu’il crée. Cela vous aide à gérer les dépendances isolées de la configuration racine du système.

Installation de 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

Après cela, vous pourrez voir un document texte contenant toutes les dépendances que vous avez installées dans virtualenv.

À votre santé:)

0
Vivek

Le problème ici provient du fait que vous avez téléchargé, compilé et installé une version (plus récente) de python3, sur une machine sur laquelle un python3 plus ancien est installé par le gestionnaire de packages. Le dernier a et pip3 associé le premier pas. Vous pouvez le vérifier en faisant /usr/local/bin/python3 --version et /usr/bin/python3 --version

De ce fait, lorsque pip3 install pyyaml est créé, le package PyYAML est ajouté à l’ancien Python3. Quand tu fais:

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

les choses devraient fonctionner, à moins que vous ne vous appuyiez sur une fonctionnalité du python3 plus récent.

Une solution plus structurelle est d'installer pip pour le python3 plus récent et de l'utiliser pour installer PyYAML.

Une solution plus structurelle consiste à ne jamais installer un tel python3 supplémentaire dans votre chemin, par exemple. Dans /opt/python/3.7.0, utilisez virtualenv -p /opt/python/3.7.0/bin/python /opt/util/yourutil, installez chaque paquet avec /opt/util/yourutil/bin/pip3 install package_name puis faites:

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

pour exécuter votre programme. Avec quelques scripts/fonctions/alias/liens, ceci peut être fait de manière très efficace sans polluer le "system space" systempython3` ni votre PATH.

0
Anthon

Essayez le suivant:
1. désinstaller python-yaml et ses dépendances.

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

Purger votre configuration/données aussi.

$ Sudo apt-get purge python3-yaml
$ Sudo apt-get purge --auto-remove python3-yaml
  1. Installer pyyaml 

    $ Sudo pip3 installer pyyaml

cela a fonctionné pour moi.

0
chitresh