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

조회수 1118회

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

질문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()

## 이하 생략....

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

  • https://github.com/MacroConnections/Place-Pulse 이거 해보시려는 건가요? 한 5년 됐네요. flask 나 다른 패키지들이 5년전에 비해 바뀐 부분들이 있어서, 최신버전으로 설치했을 때 에러들이 발생하는 것 같아요. 한 5년 정도 시점으로 패키지 버전을 낮은 버전을 깔고 돌려보는 게 가장 쉬운 방법일 것 같기는 한데.... 파이썬에 익숙하지 않으시다면 아주 쉽지는 않을 것 같습니다. nowp 2020.5.17 21:45
  • 버전의 문제가 있었군요.... 답변감사합니다! 고민이 해결되었네요ㅎㅎ 알 수 없는 사용자 2020.5.18 11:17
  • 단순 import할 때, 패키지 파일에 포함되지 않은 것 같은데, PlacePulse.db 이런식으로 경로를 찾을 수 있지 않을까요? 알 수 없는 사용자 2020.5.18 11:32
  • 혹시 어떻게 문제를 해결하셨나요? 저도 git에서 마지막에 python ./run_placepulse.py 이 부분에서 오류가 발생하네요ㅜㅜ 강승엽 2022.9.4 23:01

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)