ModuleNotFoundError,但pkg_resources找到了它



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

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

如果我尝试用导入我的包

import my_package

我得到了众所周知的ModuleNotFoundError。因此,我检查了sys.path是否包括安装我的软件包的站点软件包文件夹。

✅好的,所以我检查了哪些包裹可以使用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'}

✅正如你所看到的,我的包裹在未来之后列出。

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

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

shebang用于在pyenv-virtualenv 下运行的python脚本

在virtualenv 中找不到Python模块

未在中找到安装有PIP的模块


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中找到。

相关内容

  • 没有找到相关文章

最新更新