ModuleNotFoundError 但 pkg_resources 找到了它

ModuleNotFoundError but pkg_resources found it

我在 Linux 机器上使用带有 python 3.7.9 的 venv,并使用 pip 安装了我的一个软件包。安装脚本应该没问题,因为在 windows 下使用 anaconda 没有问题。

我在开发模式和正常模式下安装了这个包。

如果我尝试导入我的包:

import my_package

我得到了众所周知的ModuleNotFoundError。所以我检查了 sys.path 是否包含安装我的包的 site-packages 文件夹。

好的,所以我检查了哪些软件包可用 pkg_resources:

import pkg_resources
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)

结果:

{'torchvision': '0.7.0', 'torch': '1.6.0', 'tensorboardX': '2.1', 'six': '1.15.0', 
'setuptools': '47.1.0', 'protobuf': '3.13.0', 'pip': '20.2.3', 'Pillow': '7.2.0', 
'numpy': '1.19.2', 'future': '0.18.2', 'my_package': '1.0', 'absl-py': '0.10.0'}

如您所见,我的包裹列在 future 之后。

我不知道为什么 python 难以导入 my_package。 有人知道我做错了什么吗?

我已经测试了这些解决方案但没有结果:


python -m pip show --files 'BoxSupDataset'

Name: BoxSupDataset
Version: 1.0
Summary: UNKNOWN
Home-page: https://github.com/MaKaNu/PyTorch_Nasa_Dataset
Author: MaKaNu
Author-email: UNKNOWN
License: UNKNOWN
Location: /home/matti/GIT/PytorchLabs/Pytrochlabs-venv-3_7/lib/python3.7/site-packages
Requires: 
Required-by: 
Files:
  BoxSupDataset-1.0-py3.7.egg-info/PKG-INFO
  BoxSupDataset-1.0-py3.7.egg-info/SOURCES.txt
  BoxSupDataset-1.0-py3.7.egg-info/dependency_links.txt
  BoxSupDataset-1.0-py3.7.egg-info/top_level.txt
  boxsupdataset/__init__.py
  boxsupdataset/__pycache__/__init__.cpython-37.pyc
  boxsupdataset/__pycache__/nasa_box_sup_dataset.cpython-37.pyc
  boxsupdataset/__pycache__/utils.cpython-37.pyc
  boxsupdataset/nasa_box_sup_dataset.py
  boxsupdataset/transforms/__init__.py
  boxsupdataset/transforms/__pycache__/__init__.cpython-37.pyc
  boxsupdataset/transforms/__pycache__/denoise.cpython-37.pyc
  boxsupdataset/transforms/__pycache__/utils.cpython-37.pyc
  boxsupdataset/transforms/denoise.py
  boxsupdataset/transforms/utils.py
  boxsupdataset/utils.py
Python 3.7.9 (default, Aug 18 2020, 06:22:45) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import BoxSupDataset
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'BoxSupDataset'
>>> 

问题似乎是由于项目名称(可以安装的东西)和顶级包的名称(可以安装的东西)之间的轻微混淆可以导入),一些区分大小写的问题增加了混乱...

在那种特殊情况下,该项目确实被命名为 BoxSupDataset(这就是您要安装的名称)。但实际的 顶级包 boxsupdataset,这是唯一对导入重要的东西:

import boxsupdataset

旁白: 虽然在某些(不区分大小写)平台上(例如Windows?)可能可以导入为import BoxSupDataset,规范的方式是import boxsupdataset (与包或模块完全相同的名称和外壳)。可以在 PEP 235.

中找到(有点令人困惑的)详细信息