没有名为certifi的模块。

3
当在本地目录上执行Python3(Python 3.6.8)脚本时,它可以正常工作,但在Slurm中运行sbatch作业时,会抱怨certifi。
python3 -m pip install certifi

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: certifi in /usr/local/lib/python3.6/site-packages (2020.12.5)

在Python代码中添加以下内容:
import sys
import os
sys.path.append(os.getcwd())

或者这个:
import sys
import os
module_path = os.path.abspath(os.getcwd())

if module_path not in sys.path:

    sys.path.append(module_path)

出现了相同的错误。看起来已经安装了certifi。

pip show certifi

Name: certifi
Version: 2020.12.5
Summary: Python package for providing Mozilla's CA Bundle.
Home-page: https://certifiio.readthedocs.io/en/latest/
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: MPL-2.0
Location: /usr/local/lib/python3.6/site-packages
Requires:
Required-by: requests

在运行Python代码时(没有在Python代码中包含“import certifi”这一行),会出现错误:
Traceback (most recent call last):
  File "/home/username/test/test.py", line 19, in <module>
    from textattack.augmentation import WordNetAugmenter, EmbeddingAugmenter, EasyDataAugmenter, CharSwapAugmenter
  File "/home/username/.local/lib/python3.6/site-packages/textattack/__init__.py", line 12, in <module>
    from . import (
  File "/home/username/.local/lib/python3.6/site-packages/textattack/attack_recipes/__init__.py", line 21, in <module>
    from .attack_recipe import AttackRecipe
  File "/home/username/.local/lib/python3.6/site-packages/textattack/attack_recipes/attack_recipe.py", line 9, in <module>
    from textattack.shared import Attack
  File "/home/username/.local/lib/python3.6/site-packages/textattack/shared/__init__.py", line 11, in <module>
    from . import utils
  File "/home/username/.local/lib/python3.6/site-packages/textattack/shared/utils/__init__.py", line 1, in <module>
    from .install import *
  File "/home/username/.local/lib/python3.6/site-packages/textattack/shared/utils/install.py", line 9, in <module>
    import requests
  File "/home/username/.local/lib/python3.6/site-packages/requests/__init__.py", line 118, in <module>
    from . import utils
  File "/home/username/.local/lib/python3.6/site-packages/requests/utils.py", line 25, in <module>
    from . import certs
  File "/home/username/.local/lib/python3.6/site-packages/requests/certs.py", line 15, in <module>
    from certifi import where
ModuleNotFoundError: No module named 'certifi'

错误(在Python代码中包含'import certifi'一行):
Traceback (most recent call last):
  File "/home/username/projecttest_LR_attack/LR_attack.py", line 17, in <module>
    import certifi
ModuleNotFoundError: No module named 'certifi'

什么可能是这个问题的解决方案?
5个回答

9
如果你来到这里是因为在MacOS上使用httpie(或任何其他基于Python的命令)时遇到问题,请尝试使用Homebrew安装python-certifi。这应该作为依赖的一部分被安装,但由于某种原因它并不总是这样做。
brew install python-certifi

谢谢,这就是我的问题。不过,我还需要对pygments做同样的操作。看起来这是brew配方中的一个临时打包错误? - undefined
1
我遇到了同样的问题。就像@JeremyHuiskamp提到的那样,pygments是下一个问题。我注意到python-certifi也是ca-certificates所需的。我尝试了一下,在安装了python-certifi之后,我能够成功移除/安装httpie,然后pygments也作为依赖项被安装了。整个问题是在最近的Python 3更新之后开始的,我在想是不是有什么东西搞乱了python-certifi或者homebrew,导致了对python-certifi的依赖解析失败,然后这个问题就蔓延到了其他依赖项上? - undefined

2

对于在MacOS上已经运行了pip install certifi但仍无法正常工作的任何人

前往您的应用程序文件夹>找到您的Python版本文件夹->双击Python文件夹内的Install Certificates.command文件以安装证书。

等待它完成安装

之后,您可以再次尝试使用requests包运行您的代码。


0

计算节点上安装的模块和本地是否相同?您可能需要与 Slurm 管理员核实。


谢谢。我得到的建议是创建一个包含所有所需安装的虚拟机。 - undefined

0
这可能意味着 /usr/local/lib/python3.6/site-packages/ 不是您的 PYTHONPATH 环境变量,sbatch 作业在 slurm 中无法访问。您可以在运行时添加或追加它:
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages/')

谢谢你的回答,PApostol。但是错误还是一样的... - undefined

-5

pip安装certifi

在CLI上尝试这个命令


OP已经分享了"pip show"命令的输出。如果你只是想要更多信息(比如pip install的输出),应该通过在问题上发表评论来询问。 - undefined

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