首页 > 解决方案 > 从python中同一包中的文件夹导入

问题描述

我在views.py中使用金字塔

from pyramid.response import Response
from pyramid.view import view_config
import os
import uuid
import shutil
import hashlib
from .service.fun import *

def forservo():
    return "HAppy HERE"


@view_config(route_name='home',request_method='GET')
def home(request):
    return Response('html')

在 fun.py 中

from ..views import *

print forservo()

它抛出错误说名称'forservo'未定义

文件夹结构是

myapp
  myapp
  service
    __init__.py
    fun.py
  __init__.py
  views.py

标签: python-2.7pyramid

解决方案


您有一个循环导入-fun.py从导入views.pyviews.py从 导入fun.py

在这种情况下,事情大致是这样发生的:

  • Python 打开views.py并执行到该行from .service.fun import *

  • 然后它必须停止执行views.py并打开fun.py

  • 第一行fun.py告诉它停止并导入views.py

  • import 语句返回尚未forservo定义函数的部分执行模块。

循环导入可以通过将 fun.py 和 views.py 所需的公共代码位移动到单独的模块中来解决。一个不太优雅的解决方案是将一些导入移动到导致循环导入错误的函数下方,或者将它们本地化到需要导入的函数中。


推荐阅读