我的文件结构如下:
monitor/
core/
database.py
processor.py
timekeeper.py
jobs/
jobA.py
jobB.py
setup.py
我从jobA.py
像这样导入:
from core.database import Database
from core.timekeeper import Timekeeper
from core.processor import Processor
在database.py
,processor.py
和timekeeper.py
时,我导入setup.py
。
运行jobA.py
时出现以下错误:
root@test:/var/www/python/monitor# python3 jobs/jobA.py
Traceback (most recent call last):
File "jobs/jobA.py", line 2, in <module>
from core.database import Database
ModuleNotFoundError: No module named 'core'
答案 0 :(得分:1)
要允许while (a > 0)
或import core
(没有相对的点或双点),import core.database
的父目录应该是当前目录,或者应该包含在{{1} }。您似乎有一个core
。按照惯例,这表示通过sys.path
或setup.py
软件包执行安装和打包任务的文件。如果确实是它所扮演的角色,则可能需要运行它。一种运行方式是(从Python外部的命令行中)发出命令setuptools
。假设distutils
的编写正确,这将确保pip install -e /path/to/monitor
软件包在其当前位置上持久可用,可用于默认的Python发行版。下次启动Python时,setup.py
将在core
上,/path/to/monitor
将在(几乎)任何地方工作。
答案 1 :(得分:0)
从this答案中,您可以使用2个点从上面的目录中导入。因此,您可以潜在地使用:
from .core.database import Database
from .core.timekeeper import Timekeeper
from .core.processor import Processor
Python 3.3+,您不需要__init__.py
文件,因此我不认为只添加一个文件即可。
答案 2 :(得分:0)
添加
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
位于jobA.py
文件顶部。如果您使用的是python 3.3+,则不需要__init__.py
文件。它必须高于其他import
条语句。
答案 3 :(得分:-2)
您要使用哪个模块?也许您的模块与Python 3不兼容。