Python-从另一个文件导入类时出错

时间:2018-10-02 02:44:48

标签: python python-3.x python-2.7

任何人都可以指导解决错误吗? Manager类方法将需要具有创建User Class实例的功能,但找不到模块

下面是文件夹的结构和代码以及其他详细信息。 init .py文件为空

Internal folder   
  ->main.py
  ->__init__.py
  ->User Folder
     -> user.py
     -> models.py
     -> usermanager.py
     -> __init__.py



ModuleNotFoundError: No module named 'models'
  at <module> (/home/vmagent/app/internal/user/usermanager.py:4)
  at <module> (/home/vmagent/app/main.py:2)
  at import_app (/env/lib/python3.6/site-packages/gunicorn/util.py:352)
  at load_wsgiapp (/env/lib/python3.6/site- 
    packages/gunicorn/app/wsgiapp.py:52)
  at load (/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py:65)
  at wsgi (/env/lib/python3.6/site-packages/gunicorn/app/base.py:67)
  at load_wsgi (/env/lib/python3.6/site- 
    packages/gunicorn/workers/base.py:135)
  at init_process (/env/lib/python3.6/site- 
    packages/gunicorn/workers/base.py:126)
  at spawn_worker (/env/lib/python3.6/site- 
    packages/gunicorn/arbiter.py:578)

main.py代码

from internal.account import user,usermanager

def registerBlueprint(app, blueprint, manager):
     blueprint.manager = manager
     app.register_blueprint(blueprint)

registerBlueprint(app, user.request, usermanager)

user.py代码

request = Blueprint('flex.user', __name__)

@request.route('/v1/user', methods=['POST'])
def CreateAccount():
   test = request.manager.UserManager()
   return test.CreateUser()

usermanager.py

from models import User

class UserManager:

   def __init__(self):
    pass

   def CreateUser(self):
      logger.log_text("AccountManger")
      data = json.dumps(dict(
        email="Hello@123.com",
        password="Test124"
       ))
       user = User(data)
       user.create()
       responseObject = dict(status='success', message='Successfully 
       registered.')
       return make_response(jsonify(responseObject)), 201

2 个答案:

答案 0 :(得分:1)

标准库中没有models模块,并且这里没有列出名为models.py的文件,因此python无法找到它。如果models.py在某个子目录中,则该子目录需要为in your python path,并且您需要确保它们包含一个__init__.py文件。这就是您在这里遇到错误的含义。

答案 1 :(得分:1)

Python路径可能会有些棘手。我并不是说这是最好的方法,但这是我在午餐时一起砍掉的东西。也许它可以带您去需要的地方。

运行main.py时,您位于internal/目录中。您需要上一个级别,然后访问user/目录。 sys.path.append('../')就是这样。模块usermanager.pyuser/目录中,因此要从user.py导入,我们要指向当前目录。因此,from .user import User中的句点。

这是我使用的目录结构。我相信这与您拥有的一样。

C:.
├───internal
│       main.py
│       __init__.py
│
└───user
    │   models.py
    │   user.py
    │   usermanager.py
    └───__init__.py

__ init __。py

__ init__.py文件为空。

main.py

import sys
sys.path.append('../')

from user import user
from user import usermanager
from user import models

my_user = user.User()
my_user.message()

my_user_manager = usermanager.UserManager()
my_user_manager.message()
my_user_manager.CreateUser()

my_model = models.Model()
my_model.message()

models.py

class Model():

    def message(self):
        print("This is a Model!")

user.py

class User():

    def message(self):
        print("This is a User!")

usermanager.py

from .user import User

class UserManager():

    def message(self):
        print("This is a UserManager!")

    def CreateUser(self):
        new_user = User()
        print("I created the user: ", new_user)

现在,当我打电话给main.py时,我得到了:

c:\project\internal>python main.py
This is a User!
This is a UserManager!
I created the user:  <user.user.User object at 0x0000000002A61EB8>
This is a Model!

每个人都在和其他人聊天。希望您可以将其推断出您的用例!如果没有,克里斯·耶(Chris Yeh)会发表一篇文章“ The Definitive Guide to Python import Statements”,您可能会有所帮助。