2012-10-19 18 views
16

पर बीएसओ के साथ फ्लास्क आयात त्रुटि, मुझे फ्लास्क, मोंगोडीबी और पायथन का उपयोग करके काम करने के लिए एक सरल हैलो वर्ल्ड ऐप प्राप्त करने में परेशानी हो रही है। bson मॉड्यूल से आयात करने का प्रयास करते समय ऐप बमबारी कर रहा है। सभी मॉड्यूल pip के माध्यम से सफलतापूर्वक स्थापित किया गया था और मैं एक virtualenv में चल रहा हूँ, तो मुझे यकीन है कि मैं क्यों त्रुटि मिल रही है नहीं कर रहा हूँ:ओएस एक्स

import os 
from flask import Flask 
from flask import g 
from flask import jsonify 
from flask import json 
from flask import request 
from flask import url_for 
from flask import redirect 
from flask import render_template 
from flask import make_response 
import pymongo 
from pymongo import Connection 
from bson import BSON 
from bson import json_util 

app = Flask(__name__) 

@app.route('/') 
def hello(): 

    connection = Connection() 
    # Get your DB 
    db = connection.my_database 
    # Get your collection 
    cars = db.cars 
    # Create some objects 
    import datetime 
    car = {"brand": "Ford", 
      "model": "Mustang", 
      "date": datetime.datetime.utcnow()} 
    # Insert it 
    cars.insert(car) 
    json_docs = [json.dumps(doc, default=json_util.default) for doc in cars.find()] 

    return json_docs 


if __name__ == '__main__': 
    # Bind to PORT if defined, otherwise default to 5000. 
    port = int(os.environ.get('PORT', 5000)) 
    app.debug = True 
    app.run(host='0.0.0.0', port=port) 

मैं: ImportError: cannot import name BSON

यहाँ मेरी नमूना एप्लिकेशन कोड है मुझे यकीन नहीं है कि इसे डिबग करने के बारे में कैसे जाना है या अगर ऐसा कुछ है तो मैं यहां याद कर रहा हूं।

संपादित करें: pip freeze के परिणाम:

Flask==0.9 
Jinja2==2.6 
WTForms==1.0.2 
Werkzeug==0.8.3 
bson==0.3.3 
distribute==0.6.28 
mongo==0.2.0 
pymongo==2.3 
pytz==2012g 
wsgiref==0.1.2 

EDIT2: निकाला bson और pymongo, pip install pymongo reran। पूरा अब ट्रेस: ​​

Traceback (most recent call last): 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__ 
18:21:20 web.1 |  return self.wsgi_app(environ, start_response) 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/flask/app.py", line 1689, in wsgi_app 
18:21:20 web.1 |  response = self.make_response(self.handle_exception(e)) 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/flask/app.py", line 1687, in wsgi_app 
18:21:20 web.1 |  response = self.full_dispatch_request() 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/flask/app.py", line 1361, in full_dispatch_request 
18:21:20 web.1 |  response = self.make_response(rv) 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/flask/app.py", line 1450, in make_response 
18:21:20 web.1 |  rv = self.response_class.force_type(rv, request.environ) 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/werkzeug/wrappers.py", line 711, in force_type 
18:21:20 web.1 |  response = BaseResponse(*_run_wsgi_app(response, environ)) 
18:21:20 web.1 | File ".../venv/lib/python2.7/site-packages/werkzeug/test.py", line 818, in run_wsgi_app 
18:21:20 web.1 |  app_iter = app(environ, start_response) 
18:21:20 web.1 | TypeError: 'list' object is not callable 
+0

कोई चीज़ आपके _virtualenv_ साथ कुछ गड़बड़ है। आपका उदाहरण _virtualenv_ पर किसी भी समस्या के बिना चलता है मैंने अभी _pymongo_ और _flask_ के साथ बनाया है। आप किस पायथन संस्करण का उपयोग कर रहे हैं? –

+0

'पायथन 2.7.2 -' python --version' –

उत्तर

61

कोशिश bson और pymongo संकुल की स्थापना रद्द करने और फिर pymongo पैकेज फिर से स्थापित करने। pymongo अपना खुद का bson पैकेज स्थापित करता है और मुझे लगता है कि आपने इसे अन्य bson पैकेज स्थापना के साथ अधिलेखित कर दिया है और शायद यह आपकी आयात त्रुटि का कारण बन रहा है।

+0

के अनुसार कस्टम 'ठीक है अब यह एक अलग त्रुटि है:' TypeError: 'list' ऑब्जेक्ट कॉल करने योग्य नहीं है '... venv/lib/python2.7/साइट-पैकेज/फ्लास्क/एपीटीवी ", लाइन 1701, __call__ –

+0

में क्या आप पूरा ट्रेसबैक पोस्ट कर सकते हैं? –

+0

निश्चित रूप से संपादित करें 2. –

5

आप hello() में एक सूची लौट रहे हैं। आपको स्ट्रिंग या प्रतिक्रिया ऑब्जेक्ट वापस करने की आवश्यकता है, Flask docs देखें। जैसे लौटने से पहले सूची को स्ट्रिंग में कनवर्ट करें:

return '\n'.join(json_docs) 
+0

जिसने अंतिम समस्या हल की! पेड्रो के लिए मूल समाधान और आपके लिए एक उत्थान दिया। धन्यवाद रॉब! –

2

मुझे एक ही समस्या से मुलाकात हुई। मुझे लगता है कि कारण है कि मैं pymongo स्थापित करता हूं और फिर bson इंस्टॉल करता हूं। फिर मैं बीएसएन अनइंस्टॉल करता हूं। तब मुझे यह समस्या मिली।

pip freeze pymongo इसके लिए कुछ भी नहीं चाहिए।

तो हो सकता है कि इसका अपना बीएसओ पैकेज हो।

मैं इस समस्या का समाधान क्या:

pip uninstall pymongo

pip uninstall bson

और उसके बाद फिर से स्थापित pymongo

pip install pymongo