ImportError: 找不到名为 'yaml' 的模块。

145

我有一个脚本,我试图执行它。

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?

11个回答

270
pip install pyyaml

这应该能达到目的


4
如果他人遇到“找不到'pip'命令”的问题 - 我必须修改为 pip3 install pyyaml。 - Keara
另外,您还可以使用 pipenv - 它现在非常好用。 - nate
pip install --upgrade pip,然后pip install pyyaml。 - sudhir kumar mishra

24
解决方案1:安装Python 3.6(或使用pyenv管理Python版本),并将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(或python -m venv
pip3 install virtualenv
virtualenv --python=python3 venv
source venv/bin/activate
pip install pyyaml
python env/common_config/add_imagepullsecret.py

解决方案3:使用python-poetrypipenv

https://github.com/python-poetry/poetry

https://github.com/pypa/pipenv


11

如果使用conda,您可以:

 conda install -c anaconda pyyaml 


9

作为开发人员的最佳实践,每个项目都应该创建一个虚拟环境。这将有助于您将依赖项与系统根配置隔离开来。

安装 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

完成后,您将能够看到一个文本文档,其中包含您在虚拟环境中安装的所有依赖项。
祝好! :)

6
这里的问题源于您在一台已经安装了旧版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的某些功能,否则事情应该能够正常工作。

更结构化的解决方案是为较新的python3安装pip,并使用它来安装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的情况下非常高效地完成。


我曾经遇到过类似的情况,即软件包管理器安装了Python 2.7和我自己安装了Python 3.8,并且在需要时使用python3命令来运行Python 3.8。但是,VS Code出现了错误,所以我开始查看并意识到我已经同时安装了这两个版本。因此我删除了python2.7,然后必须通过运行sudo ln -s /usr/bin/python3 /usr/local/bin/python3来将 /usr/local/bin/python3链接到 /usr/bin/python3 - Tricky Bay

5
尝试以下操作:
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
  1. 安装pyyaml

    $ sudo pip3 install pyyaml

这对我起作用了。


1
为什么?这里发生了什么事? - dumbledad
python3-yaml是许多平台上的一个重要依赖项,使用时请谨慎操作。 - Royce Williams

2
在我的情况下,这是由于在bash脚本中使用了“#! /usr/bin/env python”引起的。即使在我的PATH开头加上/Library/Frameworks/Python.framework/Versions/3.8/bin,env也没有找到v 3.8,而是默认使用了来自/usr/bin的v 2.7,它没有PyYAML。
我的解决方案是修改脚本以显式调用python3,但你也可以在3.8 bin目录中放置一个符号链接,这样它就能找到python。

2

在 Mac 上,我必须这样做

python3 -m pip install pyyaml

1
如果您已经在使用虚拟环境并且出现了这个错误,只需删除 venv 目录并重新安装即可修复问题。
virtualenv --python=python3.8 .venv
source .venv/bin/activate
pip install -r requirements.txt # or just: pip install pyyaml

0
在我的情况下(使用在macOS上安装的brew),问题是pyyaml没有链接,尽管它已经安装了。
为了解决这个问题,我不得不强制进行链接。
brew link --overwrite pyyaml 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接