【问题标题】:ImportError: No module named 'yaml'ImportError:没有名为“yaml”的模块
【发布时间】:2018-11-24 20:54:10
【问题描述】:

我有一个正在尝试执行的脚本

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?

【问题讨论】:

  • 对 python3 和 pip3 分别运行 which 以确保它们指向相同的版本,您也可以尝试 python3 -m pip install pyyaml
  • @will7200 这是我的 o/p: which pip3 -- /usr/bin/pip3 which python -- /usr/local/bin/python
  • pip3 指向不同的 python3。使用 python3 -m pip install pyyaml,这将确保它使用该 python 版本的正确 pip。
  • 还有一个观察结果:当我使用 python2.7 CLI 并执行 import yaml 时——我没有收到任何错误。但是,在使用 python3 或任何其他版本的 CLI 并执行 import yaml 时——我收到 ImportError: No module names 'yaml'
  • 每个 python 版本都需要安装 yaml,无论是否安装了其他当前 python 版本。它还必须使用指向该 python 版本的正确 pip 进行安装。

标签: python python-3.x pip pyyaml


【解决方案1】:

开发人员的最佳实践是为他们创建的每个项目创建一个 virtualenv。这有助于您维护与系统根配置隔离的依赖项

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

在此之后,您将能够看到一个文本文档,其中包含您在 virtualenv 中安装的所有依赖项。

干杯 :)

【讨论】:

  • 请注意,开发人员也可以是女性或二进制人:)(他们/他们是非常喜欢的性别中立的东西)
【解决方案2】:

如果您已经在使用虚拟环境并收到此错误,只需删除 venv 目录并为我重新安装已修复的东西。

virtualenv --python=python3.8 .venv
source .venv/bin/activate
pip install -r requirements.txt # or just: pip install pyyaml

【讨论】:

    【解决方案3】:

    如果使用conda,您可以:

     conda install -c anaconda pyyaml 
    
    

    【讨论】:

      【解决方案4】:

      解决方案1:安装python 3.6(或使用pyenv管理py版本)和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
      

      解决方案 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

      【讨论】:

        【解决方案5】:

        在我的情况下,这是由 bash 脚本中的“#!/usr/bin/env python”引起的。 即使 /Library/Frameworks/Python.framework/Versions/3.8/bin 在我的 PATH 开头,env 也没有找到 v 3.8,而是默认为来自 /usr/bin 的 v 2.7,它没有 PyYAML。

        我的解决方案是修改脚本以显式调用 python3,但你也可以在 3.8 的 bin 目录中放置一个符号链接,以便它找到 python。

        【讨论】:

          【解决方案6】:
          pip install pyyaml
          

          这应该可以达到目的

          【讨论】:

          • 如果其他人遇到“command 'pip' not found”的问题 - 我不得不将其修改为 pip3 install pyyaml
          • 或者,使用pipenv - 现在太棒了
          • pip install --upgrade pip 然后 pip install pyyaml
          【解决方案7】:

          尝试以下操作:
          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

          这对我有用。

          【讨论】:

          • 为什么?这是怎么回事?
          【解决方案8】:

          这里的问题源于您已经下载、编译并安装了一个(较新)版本的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 的某些功能,否则一切都应该正常工作。

          一个更结构化的解决方案是 to install pip 用于较新的 python3 并使用它来安装 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`“安装空间”或您的路径。

          【讨论】:

            猜你喜欢
            • 2016-11-03
            • 2013-03-11
            • 2012-12-07
            • 2012-05-23
            • 2019-07-29
            • 2015-07-04
            • 2014-03-15
            • 2017-12-29
            • 2014-09-12
            相关资源
            最近更新 更多