편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.05.17

    다른 .py에 있는 모듈을 import 하고자 하는데 안됩니다.


    제가 몇일동안 찾아보고 해결해보려 했지만 어떻게 해결해야 하는지를 찾을 수가 없었습니다. 뭐가 문제인지도 잘 몰라서 어떻게 질문을 해야할 지 잘 모르겠지만 최대한 써보았습니다. 긴 글 잠시나마 읽어주시면 감사하겠습니다!

    질문1.

    아래 run.py를 실행시 나타나는 에러 메시지 중 No module named 'db'가 나옵니다. __init__.py로 가보았을때 에러가 나타난 부분이 from db import Database 입니다. db.py라는 파일이있는데, 이 파일이 왜 import가 안되는 것인지 모르겠습니다. 또한 문제가 있다면 어떻게 해결해야 하는지 모르겠습니다.

    질문2.

    db.py 이외에 root.py , util.py 등 다른 .py파일에 있는 함수들도 불러오고자 하는데 불러와지지가 않습니다.

    사용 설명에는 TODO: Move from modules to blueprints, see http://flask.pocoo.org/docs/blueprints/ 라고 나와있는데, Blueprint가 아니더라도 .py 파일을 불러 올 수 있지 않나 하고있습니다.

    이하는 코드와 에러메시지 입니다.

    run.py

    import logging
    import os
    
    from flask import Flask
    
    from PlacePulse import app, buildIndices, initDB
    
    if __name__ == '__main__':
        port = int(os.environ.get("PORT", 8000))
        app.logger.setLevel(logging.DEBUG)
        app.config.update(DEBUG=True,PROPAGATE_EXCEPTIONS=True)
        app.run(debug=True,host='0.0.0.0',port=port)
    

    실행 시 에러메시지

    Traceback (most recent call last):
      File "D:/fresh/바탕화면/연구폴더/Place-Pulse/run_placepulse.py", line 8, in <module>
        from PlacePulse import app, buildIndices, initDB
    
    
      File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\__init__.py", line 7, in <module>
        from db import Database
    ModuleNotFoundError: No module named 'db'
    

    실행 시 에러메시지가 위와 같이 나욌습니다. 이 에러를 해결하기 위해서 __init__.py로 가보았습니다.

    __init__.py

    from flask import Flask, redirect, request, Blueprint, render_template
    app = Flask(__name__)
    import os
    import logging
    import re
    import pymongo
    from db import Database
    from util import *
    from random import random
    from trueskill import trueskill
    import json
    import time
    import tornado.ioloop
    import numpy as np
    
    
    from root import root
    from admin import admin
    from login import login
    from matching import matching
    from results import results
    from study import study
    app.register_module(root)
    app.register_module(admin)
    app.register_module(login)
    app.register_module(matching)
    app.register_module(results)
    app.register_module(study)
    
    app.secret_key = "a10ad1a40b754a4d9b663fac60556a78"
    
    @app.route("/")
    def main():
        studyObj = Database.getRandomStudy()
        if studyObj is None:
            return "Uh oh.. no study found in database."
        votesCount = Database.getVotesCount()
        return auto_template('main.html',study_id=studyObj.get('_id'),study_prompt=studyObj.get('study_question'), votes_contributed=votesCount, votes_for_study=studyObj['num_votes'])
    
    ## 이하 생략...
    

    __init__.py 코드를 실행시켜 본 결과 에러가 아래와 같이 나왔습니다.

    Traceback (most recent call last):
      File "D:/fresh/바탕화면/연구폴더/Place-Pulse/PlacePulse/__init__.py", line 8, in <module>
        from util import *
    
      File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\util.py", line 3, in <module>
        from PlacePulse import app
    
      File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\__init__.py", line 27, in <module>
        from root import root
    
      File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\root.py", line 1, in <module>
        from flask import Module
    
    ImportError: cannot import name 'Module' from 'flask' (D:\fresh\바탕화면\연구폴더\Python\venv\lib\site-packages\flask\__init__.py)
    

    db.py

    import os
    import pymongo
    import random
    import sys
    from uuid import uuid4
    from bson.objectid import ObjectId
    from pymongo import ASCENDING
    import math
    from random import choice
    from random import randint
    from trueskill import trueskill
    import numpy.random as rnd
    
    class database(object):
        studs = None
        locs = None
        biased_studs = None
        study2activeLocID = None
    
        def getResultsForStudy(self,studyID):
            # FIXME: Normalize use of ObjectId/str for _id's.
            return self.results.find_one({
                    "$or":[
                        {'study_id': studyID},
                        {'study_id': ObjectId(studyID)}
                    ]
            })
    
        def getAllStudies(self):
            return self.studies.find()
    
    ## 이하 생략....
    

    어떻게 질문해야 할지 몰라 너무 중구난방 글을 두서없이 썻네요. 긴 글 읽어주셔서 감사합니다.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.05.17

    다른 .py에 있는 모듈을 import 하고자 하는데 안됩니다 ㅠㅠ


    제가 몇일동안 찾아보고 해결해보려 했지만.. 어떻게 해결해야 하는지를 찾을 수가 없었습니다ㅠㅠ 뭐가 문제인지도 잘 몰라서 어떻게 질문을 해야할 지 잘 모르겠지만... 최대한 써보았습니다. 긴 글 잠시나마 읽어주시면 감사하겠습니다!!!

    질문1.

    아래 run.py를 실행시 나타나는 에러 메시지 중 No module named 'db'가 나옵니다. init.py로 가보았을때 에러가 나타난 부분이 from db import Database 입니다. db.py라는 파일이있는데, 이 파일이 왜 import가 안되는 것인지 모르겠습니다. 또한 문제가 있다면 어떻게 해결해야 하는지 모르겠습니다..

    질문2.

    db.py 이외에 root.py , util.py 등 다른 .py파일에 있는 함수들도 불러오고자 하는데 불러와지지가 않습니다. 사용 설명에는 TODO: Move from modules to blueprints, see http://flask.pocoo.org/docs/blueprints/ 라고 나와있는데... Blueprint가 아니더라도 .py 파일을 불러 올 수 있지 않나 하고있습니다.

    이하는 코드와 에러메시지 입니다.

    run.py

    import logging
    import os
    
    from flask import Flask
    
    from PlacePulse import app, buildIndices, initDB
    
    if __name__ == '__main__':
        port = int(os.environ.get("PORT", 8000))
        app.logger.setLevel(logging.DEBUG)
        app.config.update(DEBUG=True,PROPAGATE_EXCEPTIONS=True)
        app.run(debug=True,host='0.0.0.0',port=port)
    

    실행 시 에러메시지

    Traceback (most recent call last): File "D:/fresh/바탕화면/연구폴더/Place-Pulse/run_placepulse.py", line 8, in from PlacePulse import app, buildIndices, initDB

    File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse_init_.py", line 7, in from db import Database ModuleNotFoundError: No module named 'db'

    실행 시 에러메시지가 위와 같이 나욌습니다. 이 에러를 해결하기 위해서 init.py로 가보았습니다.

    init.py

    from flask import Flask, redirect, request, Blueprint, render_template
    app = Flask(__name__)
    import os
    import logging
    import re
    import pymongo
    from db import Database
    from util import *
    from random import random
    from trueskill import trueskill
    import json
    import time
    import tornado.ioloop
    import numpy as np
    
    
    from root import root
    from admin import admin
    from login import login
    from matching import matching
    from results import results
    from study import study
    app.register_module(root)
    app.register_module(admin)
    app.register_module(login)
    app.register_module(matching)
    app.register_module(results)
    app.register_module(study)
    
    app.secret_key = "a10ad1a40b754a4d9b663fac60556a78"
    
    @app.route("/")
    def main():
        studyObj = Database.getRandomStudy()
        if studyObj is None:
            return "Uh oh.. no study found in database."
        votesCount = Database.getVotesCount()
        return auto_template('main.html',study_id=studyObj.get('_id'),study_prompt=studyObj.get('study_question'), votes_contributed=votesCount, votes_for_study=studyObj['num_votes'])
    
    이하 생략...
    

    init.py 코드를 실행시켜 본 결과 에러가 아래와 같이 나왔습니다.

    Traceback (most recent call last): File "D:/fresh/바탕화면/연구폴더/Place-Pulse/PlacePulse/init.py", line 8, in from util import *

    File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\util.py", line 3, in from PlacePulse import app

    File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse_init_.py", line 27, in from root import root

    File "D:\fresh\바탕화면\연구폴더\Place-Pulse\PlacePulse\root.py", line 1, in from flask import Module

    ImportError: cannot import name 'Module' from 'flask' (D:\fresh\바탕화면\연구폴더\Python\venv\lib\site-packages\flask_init_.py)

    db.py

    import os
    import pymongo
    import random
    import sys
    from uuid import uuid4
    from bson.objectid import ObjectId
    from pymongo import ASCENDING
    import math
    from random import choice
    from random import randint
    from trueskill import trueskill
    import numpy.random as rnd
    
    class database(object):
        studs = None
        locs = None
        biased_studs = None
        study2activeLocID = None
    
        def getResultsForStudy(self,studyID):
            # FIXME: Normalize use of ObjectId/str for _id's.
            return self.results.find_one({
                    "$or":[
                        {'study_id': studyID},
                        {'study_id': ObjectId(studyID)}
                    ]
            })
    
        def getAllStudies(self):
            return self.studies.find()
    
    이하 생략....
    

    어떻게 질문해야 할지 몰라 너무 중구난방 글을 두서없이 썻네요.. 긴 글 읽어주셔서 감사합니다...