python - 从子子文件夹导入模块的问题
问题描述
我正在尝试使用不确定性库,并且在我的 dir 结构中克隆了 repo,如下所示:
.Lux/
├── generateFeatures.py
├── generateLexicons.py
├── __init__.py
├── res
│ ├── __init__.py
│ ├── test2.py
│ └── uncertainty
│ ├── __init__.py
│ ├── test1.py
│ └── uncertainty
│ ├── classifier.py
│ ├── lib
│ │ ├── __init.py__
│ │ └── nlp
│ │ ├── __init__.py
我的两个 test.py 有相似的内容,他们所做的只是导入不确定性分类器
test1.py 完美运行
from uncertainty.classifier import Classifier
但是 test2.py
from uncertainty.uncertainty.classifier import Classifier
产量:
Traceback (most recent call last):
File "/home/lucas/Lux/Lux/lib/python3.5/site-packages/pkg_resources/__init__.py", line 359, in get_provider
module = sys.modules[moduleOrReq]
KeyError: 'uncertainty.lib.nlp'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from uncertainty.uncertainty.classifier import Classifier
File "/home/lucas/Lux/res/uncertainty/uncertainty/classifier.py", line 9, in <module>
from .lib.nlp import summarizer
File "/home/lucas/Lux/res/uncertainty/uncertainty/lib/nlp/__init__.py", line 3, in <module>
VERBS_PATH = resource_filename('uncertainty.lib.nlp', 'verbs.txt')
File "/home/lucas/Lux/Lux/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1144, in resource_filename
return get_provider(package_or_requirement).get_resource_filename(
File "/home/lucas/Lux/Lux/lib/python3.5/site-packages/pkg_resources/__init__.py", line 361, in get_provider
__import__(moduleOrReq)
ImportError: No module named 'uncertainty.lib'
为什么 test1.py 有效而 test2.py 无效?
更新
我__init__.py
在每个没有它们的文件夹上都放了空,但仍然无法弄清楚。
我尝试将我的外部uncertainty
文件夹重命名为其他名称,认为这可能是一个错误的解析名称,但这也不起作用。
解决方案
问题是由于__init__.py
文件lib/nlp
夹中的文件而发生的。正如thom747在评论中指出的那样,为inVERBS_PATH
提供了一条路径。verbs'txt
uncertainty/lib/nlp
当您从 导入时,此路径是正确的test1.py
,但在从 导入时test2.py
,它会在文件所在lib/nlp
的父uncertainty
目录中test2.py
查找。它找不到一个,因此你得到一个ImportError
.
使固定
只需将文件中VERBS_PATH
的分配更改为uncertainty/lib/nlp/__init__.py
VERBS_PATH = resource_filename('uncertainty.uncertainty.lib.nlp', 'verbs.txt')
推荐阅读
- python - 在 tkinter 中创建加载屏幕
- java - java spring:如何分离用户角色和权限?
- sql-server - 在不同表之间重用 SQL Server Azure 上的分区函数和架构是一种好习惯吗?
- php - 如何使用在 URL 上传递 id 的主页上的按钮更新 Mysql 数据?
- html - 如何在保留其功能的同时删除输入字段“日期”的默认图标?
- c++ - 连接按钮以在 Qt C++ 中创建和存储对象
- javascript - 如何在 Oracle APEX 中动态控制区域显示选择器?
- node.js - 如何将文件传输到获取服务器
- python-3.x - 在 vscode 上复制粘贴朴素贝叶斯示例代码但出现错误
- javascript - 放置默认值