我真的不想问另一个 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
的副本,我只是在问错问题。
感谢您的帮助。