ImportError: No module named 'yaml'

一个人想着一个人 提交于 2019-11-29 18:17:35

问题


I have one script in which I am trying to execute

python3 env/common_config/add_imagepullsecret.py

But, I am getting the following error:

 [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 is already installed in the machine:

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

How can I get this script to import PyYAML?


回答1:


pip install pyyaml

This should serve the purpose




回答2:


Solution 1: install python 3.6 and ln python3 to it

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: use virtualenv

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

Solution 3: use pipenv

https://docs.pipenv.org/




回答3:


Try the follwoing:
1. uninstall python-yaml and its dependencies.

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

Purging your config/data too.

$ sudo apt-get purge python3-yaml
$ sudo apt-get purge --auto-remove python3-yaml
  1. Install pyyaml

    $ sudo pip3 install pyyaml

this worked for me.




回答4:


It is best practice of a developer to create a virtualenv for every project he creates.This helps you to maintain the dependencies isolated from the root config of the system

Installing 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

After this you will be able to see a text doc containing all the dependencies you have installed in the virtualenv.

Cheers :)




回答5:


The problem here arises from the fact that you have downloaded, compiled and installed a (newer) version of python3, on a machine that has an older python3 installed by the package manager. The latter has and associated pip3 the former does not. You can verify this by doing /usr/local/bin/python3 --version and /usr/bin/python3 --version

Because of that, what happens when you do pip3 install pyyaml is to add the PyYAML package to the old Python3. When you do:

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

things should work, unless you rely on some feature of the newer python3.

A more structural solution is to install pip for the newer python3 and use that to install PyYAML.

A more structural solution, is to never install such additional python3 in your path, but e.g. in /opt/python/3.7.0, use virtualenv -p /opt/python/3.7.0/bin/python /opt/util/yourutil, install every package with /opt/util/yourutil/bin/pip3 install package_name and then do:

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

to run your program. With a few supporting scripts/functions/aliases/links, this can be done very efficiently without polluting the systempython3` "install space" nor your PATH.




回答6:


Just in case none of the above solutions works for you then, here is a permanent fix. download suitable version of pyyaml, extract and install.

Example:

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

Note: One may download the latest version available if you are not sure about a specific version.



来源:https://stackoverflow.com/questions/50868322/importerror-no-module-named-yaml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!