pip 无法识别 PIL

问题描述

这是一个非常水平的问题。我正在使用 pdoc 为我的库创建一些文档,它使用 PIL 进行图像处理。一切正常,除了使用 PIL 的模块,它抛出了以下内容

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pdoc/doc.py",line 400,in submodules
    module = extract.load_module(mod.name)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/contextlib.py",line 75,in inner
    return func(*args,**kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pdoc/extract.py",line 221,in load_module
    raise RuntimeError(f"Error importing {module}") from e
RuntimeError: Error importing timmaldFunctions.setup

  warnings.warn(
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pdoc/doc.py:402: RuntimeWarning: Couldn't import timmaldFunctions.imageStuff:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pdoc/extract.py",line 219,in load_module
    return importlib.import_module(module)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py",line 127,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "<frozen importlib._bootstrap>",line 1014,in _gcd_import
  File "<frozen importlib._bootstrap>",line 991,in _find_and_load
  File "<frozen importlib._bootstrap>",line 975,in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 671,in _load_unlocked
  File "<frozen importlib._bootstrap_external>",line 783,in exec_module
  File "<frozen importlib._bootstrap>",in _call_with_frames_removed
ModuleNotFoundError: No module named 'PIL'

它多次抛出那个确切的异常,尽管我运行过一次。只是为了检查,我使用了 pip3.9 show PIL,它说 WARNING: Package(s) not found: PIL。但是,我在 PyCharm 中多次使用 PIL.Image,总是使用 python 3.9,就像我在这个库中使用的一样。我查看了 /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages 并在那里找到了 PIL。然后我确保该站点包路径在 sys.path 中,并且确实如此。我尝试使用 Pillow(PIL 的一个分支),并确保我有一个python3.9 兼容的版本(我有 8.1)。但是,即使我通过 PyCharm 和 pip3.9 install Pillow 中的自动安装以及 pip3.9 install pillow 安装了软件包。 pip3.9 show Pillowpip3.9 show pillow 表示它存在并且版本正确。但是,PyCharm 仍然表现得好像没有安装一样,并抛出 ModuleNotFoundError: No module named 'Pillow'。我也了解到PIL和pillow不能在同一个环境中,所以我尝试了pip3.9 uninstall PIL,但是pip认为这个包根本就不存在。在我看来,我有 2 个选择:获取 pdoc 和 pip 以识别 PIL,或获取 Python 以识别 Pillow。我该怎么做,还是有其他选择?提前致谢,如果您需要更多信息,请告诉我!

更新:

我使用给出的答案中的命令创建了一个 venv,然后我找到了名为 activate 的文件(无扩展名),并在终端中输入以下内容source path-to-activate,此时venv 出现在每个新终端行开头后面的括号中。然后进入PyCharm的解释器设置,在PyCharm上新建一个环境,选择“现有环境”,然后放入venv文件夹/bin/python3.9的路径(这个是指向真正python3.9的别名) .它以它所在的项目命名该设置。我在解释器选项中切换到该设置。然后我从终端(仍在使用 venv)运行 pip3.9 install pillow,同时使用 pip 和 pip3.9,并用新 venv 中的路径替换它们。每次我收到要求已经满足的消息时,确保安装了枕头。我还检查了站点包,那里有 PIL,还有 Pillow-dist-info。 PyCharm 没有出错,所以它正在工作。但是,当我运行 pdoc path-to-library-folder(仍在 venv 中)时,它抛出了完全相同的错误。我做错了吗?

解决方法

我该怎么做,或者还有其他选择吗?

一般来说,对于开源项目,我会检查他们的存储库,看看哪个有最近的提交/活动。在您的情况下,PIL 的最后一次提交是 10 年前,9 个分叉,9 颗星和 0 个观察者,而 pillow 的最后一次提交是 6 小时前,1.6k 分叉,8.4k 颗星和 216观察者。虽然这不是一个完美的指标,但它是一个经验法则。

如何进行?从头开始:

  1. 使用 python3 -m venv nathans_new_venv 创建一个新的 venv 并激活它,获取其激活线。
  2. 现在,pip3.9 安装枕头或 nathans_new_venv/bin/pip 安装枕头

将 pycharm 指向 nathans_new_venv,你应该是金色的。