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?
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
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é:)
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.
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
Installer pyyaml
$ Sudo pip3 installer pyyaml
cela a fonctionné pour moi.