问题
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
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