从项目子目录导入到第二个项目子目录

时间:2020-03-04 19:00:09

标签: python python-3.x

我真的不想问另一个 python导入问题。但是经过数小时的尝试和研究,我无法弄清自己做错了什么。

注意:我正在./scanner/中运行python scanner.py来仅测试整个应用程序的这一部分,这是否影响导入?

项目根:

.
├── __init__.py
├── flask.main.py
├── index
│   ├── index.py
│   └── __init__.py
├── scanner
│   ├── assets
│   ├── __init__.py
│   ├── scanner.py
│   └── test.py
├── sql
│   ├── db_connect.py
│   └── __init__.py
└── user
    ├── __init__.py
    └── user.py

scanner.py#1:

from ...sql import db_connect

结果:

ValueError: attempted relative import beyond top-level package

scanner.py#2:

from sql.db_connect import *

结果:

ModuleNotFoundError: No module named 'sql'

scanner.py#3:

from ..sql.db_connect import *

结果:

ValueError: attempted relative import beyond top-level package

scanner.py#4:

import ..sql.db_connect

结果:

import ..sql.db_connect
           ^
SyntaxError: invalid syntax

我只是试图将SQL类从“ ./sql/db_connect.py”导入“ ./scanner/scanner.py”。

如果我将scanner.py移入项目根目录或与sys.path混为一谈,则可以使它工作,但似乎无法从项目根目录的子目录导入项目根目录的第二个子目录

编辑:尝试删除。因此它是..sql.db_connect,但使导入超出了顶级程序包错误。


Edit2:

我遇到了这个问题:https://stackoverflow.com/questions/30669474/beyond-top-level-package-error-in-relative-import,它把它作为答案之一:

import sys
sys.path.append("..") # Adds higher directory to python modules path.

如果我将其添加到scanner.py:

from sql import db_connect

现在有效。

我愿意接受这一点,因为我只是尝试测试scan.py代码,因为运行主应用程序时路径不同。我将假设这是一项安全功能,可以阻止人们注入导入文件,而该文件完全存在于系统中的其他位置。


Edit3:经过大量研究,试验和错误,我得出的结论是,不编辑“ sys.path”是不可能的。我已将其标记为https://stackoverflow.com/questions/4383571/importing-files-from-different-folder的副本,我只是在问错问题。

感谢您的帮助。

0 个答案:

没有答案