Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何加载与Python中其他模块同名的模块?_Python_Google App Engine - Fatal编程技术网

如何加载与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