无法从父目录导入文件

时间:2019-10-03 19:53:39

标签: python python-3.x

我的文件结构如下:

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.pyprocessor.pytimekeeper.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'

4 个答案:

答案 0 :(得分:1)

要允许while (a > 0) import core(没有相对的点或双点),import core.database的父目录应该是当前目录,或者应该包含在{{1} }。您似乎有一个core。按照惯例,这表示通过sys.pathsetup.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不兼容。