如何加载与Python中其他模块同名的模块?
让我解释一下问题——我们有这样的项目:如何加载与Python中其他模块同名的模块?,python,google-app-engine,Python,Google App Engine,让我解释一下问题——我们有这样的项目: model/__init__.py model/abstract.py task/__init__.py task/model.py 如何加载到task/model.py model.abstract中它的语法是什么 task/model.py 导入它加载任务的模型/model.py而不是模型 从model.abstract导入测试中,没有测试异常 model/abstract.py 测试=1 如何进行此类导入 要求提供更多细节 谷歌应用程序引擎应用程序
model/__init__.py
model/abstract.py
task/__init__.py
task/model.py
如何加载到task/model.py model.abstract中它的语法是什么
task/model.py
导入它加载任务的模型/model.py而不是模型
从model.abstract导入测试中,没有测试异常
model/abstract.py
测试=1
如何进行此类导入
要求提供更多细节
谷歌应用程序引擎应用程序:
-main是main.py
目录结构:
└───src
│ app.yaml
│ index.yaml
│ main.html
│ main.py
│ task_master_api.py
│
├───circle
│ model.py
│ __init__.py
│
├───model
│ abstract.py
│ xxx.py
│ __init__.py
│
├───task
│ model.py
│ __init__.py
│
├───user
│ model.py
│ __init__.py
异常请参见根目录中的task.model非model:
from .. import model
logging.critical((type(model), model.__name__))
from model.abstract import AbstractNamed, AbstractForgetable
-
这是个例外
ValueError: Attempted relative import beyond toplevel package
虽然ndpu答案中的相对导入应该是有效的,但我脑海中这个问题的答案很简单:更改文件名以避免此错误 如果circle目录中有model.py,那么将名称更改为circle\u model.py如何 然后,您应该能够在不进行任何相关导入的情况下导入模块。。生意 编辑-现在知道您不想重命名
确保您的src目录中有一个_uinit__u;.py文件,然后尝试从.model.abstract导入的相对导入测试其他答案中给出的相对导入应该可以正常工作。但它不起作用,因为您有名称冲突。您有一个名为model的包和模块。尝试为包或模块使用其他名称 我发现了两个技巧来强制将modele名称加载到模块名称中: 首先,仅强制绝对载荷:
from __future__ import absolute_import
import name
第二个与前一个类似,但更多的代码和更多的本地影响:
save_path = sys.path[:]
sys.path.remove('')
import name
sys.path = save_path
您是否将model.py作为脚本运行?Not-model.py已导入到另一个具有main的模块中。我知道解决方法,但想知道如何不使用解决方法。已在src with中尝试了_uinit__;.py没有带..=ValueError:尝试在顶级软件包之外进行相对导入python的it限制是,您不能在名为的模块中使用名为的模块-它真的存在吗?感谢所有帮助人员的建议!
from __future__ import absolute_import
import name
save_path = sys.path[:]
sys.path.remove('')
import name
sys.path = save_path