从python相同包中的文件夹导入

时间:2018-07-09 11:39:51

标签: python-2.7 pyramid

我在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

2 个答案:

答案 0 :(得分:2)

您有一个cyclic import-fun.pyviews.py导入和views.pyfun.py导入。

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

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

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

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

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

可以通过将fun.py和views.py所需的通用代码位移动到单独的模块中来解决循环导入问题。一种不太优雅的解决方案是将某些导入移动到导致循环导入错误的函数下方,或将其放置在需要导入的函数内部。

答案 1 :(得分:0)

在此文件夹结构中

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

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中的import语句是:

from myapp.views import forservo()

print forservo()

,这将显示“ HAPPy HERE”(快乐)。