我有一个包含以下结构的包
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缓存无效)
答案 0 :(得分:0)
__init__.py
个文件添加到源根目录 †。 sys.path
中可以看到项目根目录 ††。项目根不应该有__init__.py
。项目目录名称与包名称匹配并不是必需的,但这并不会对任何内容造成任何损害。 sys.path.append
内容,并且不要再这样做了。 from projectX import main_worker
是stats_worker2.py
模块的正确导入语句。不要使用import main_worker
。 对于第2步,通常的方法是通过"安装"你的包裹,python setup.py develop
。即你需要写一个setup.py
。由于您显然没有setup.py
,作为便宜的解决方法,您可以export PYTHONPATH=<absolute_path_to_project_root>
代替。
† 源根是更深的projectX
目录,它是包含main_worker.py
模块的同一目录。
†† 项目根目录是浅层projectX
目录,它是包含data
和results
子目录的同一目录。 子>