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

importing from folder in same package in 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

在此文件夹结构中

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"

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

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

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

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

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

  • 导入语句 returns 尚未定义 forservo 函数的部分执行模块。

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