【发布时间】:2023-03-09 15:21:01
【问题描述】:
我有一个结构如下的包
projectX
├── data
├── results
└── projectX
├── stats
│ ├── __init__.py
│ ├── stats_worker.py
│ └── stats_wroker2.py
├── __init__.py
├── main_worker.py
└── interface.py
请注意,项目文件夹和源文件夹共享相同的名称 (projectX)。
问题有点复杂,需要做一些前提
场地:
我总是启动界面并且总是启动界面。没有调用其他脚本
我的问题首先出现在尝试从 stats_worker2 导入 main_worker 时。
我无法将其作为相对导入。所以我试图 从 stats_worker2 和接口(分别)将父目录附加到 sys.path。我尝试了各种我不记得的方法。
最终通过在 stats_worker2 中添加以下行来实现
sys.path.append('../projectX')
from projectX import main_worker
现在开始奇怪了
在调用了几次脚本之后(我不记得具体有多少次了),上面的 sintax 不再起作用了。因为有一个: ImportError: 没有名为 projectX 的模块
编辑:上面的斜体部分是由于我在 projectX 源文件夹中缺少__init__.py。所有其他症状仍然存在。
但是,很奇怪,我现在可以从 stats_worker2 成功导入主要工作人员:
import main_worker
没有任何目录被附加到 sys.path!
但是,Sphinx 不再工作了! 具体来说,它无法导入 projectX 包的所有模块。
额外的怪异我曾经从界面成功导入 stats_worker,现在我仍然可以导入它,但是我的 IDE (Pycharm) 将导入标记为未使用。它实际上已被使用,如果我评论导入,界面会按预期崩溃(我已经使 Pycharm 缓存失效)
【问题讨论】:
-
您在 projectX 中是否缺少
__init__.py? -
是的,对不起,我在某个时候删除了它以进行测试,忘记添加了。既然我已经恢复了它,我将相应地编辑这个问题(剧透:它实际上是一样的)
标签: python python-import python-packaging relative-import