2014-12-09 12 views
9

Tôi đang cố gắng xây dựng một kịch bản Python triviol sẽ lấy dữ liệu từ URL và lưu nó vào máy chủ. Concider vào mã bên dưới:Python: ImportError: /usr/local/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace

#!/usr/bin/python 
import pprint 
import json 
import urllib2 

def getUSGS_json(): 
    print "Fetch data from URL" 

    fileName = 'data/usgsEarthquacks_12Hrs.json' 
    url = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson' 
    data = urllib2.urlopen(url).read() 

    if data: 
     try: 
      with open(fileName) as jsonGetData: 
       filePut = open(fileName, 'w+') 
       #add data 
       filePut.write(data) 
       filePut.close() 

       j = json.load(jsonGetData) 
       print j 
     except Exception, e: 
      print e 
      raise 
     else: 
      pass 
     finally: 
      pass 
    #end if 
#end getUSGS_json 

getUSGS_json() 

Sau khi chạy kịch bản tôi nhận được các lỗi sau đây:

Traceback (most recent call last): 
    File "geoJsonFetch.py", line 4, in <module> 
    import urllib2 
    File "/usr/local/lib/python2.7/urllib2.py", line 94, in <module> 
    import httplib 
    File "/usr/local/lib/python2.7/httplib.py", line 79, in <module> 
    import mimetools 
    File "/usr/local/lib/python2.7/mimetools.py", line 6, in <module> 
    import tempfile 
    File "/usr/local/lib/python2.7/tempfile.py", line 32, in <module> 
    import io as _io 
    File "/usr/local/lib/python2.7/io.py", line 51, in <module> 
    import _io 
ImportError: /usr/local/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace 

Tôi đã nhìn quanh trên SO và thấy lỗi tương tự như this one, nhưng họ dường như không có được trái tim của lý do tại sao một số người có thể nhận được mã này để chạy và tôi không. Tất cả họ dường như đang giải quyết các vấn đề liên quan đến việc phát triển trong C và sử dụng Python để truy cập vào mô-đun C đó.

Đây có phải là phiên bản Ubuntu, phiên bản Python không ??

Cảm ơn bạn.

+1

bạn không nên sử dụng 'data = urllib2.urlopen (url) .read()'? –

+1

Có vẻ như bạn có nhiều bản cài đặt Python đang dẫm lên nhau. –

Trả lời

17

Bạn có (ít nhất) hai phiên bản Python khác nhau được cài đặt và bạn đang trộn các tệp của chúng. Đảm bảo rằng $PYTHONPATH, $PYTHONHOMEsys.path chỉ chứa các thư mục để cài đặt một Python. Trong trường hợp của bạn, một bản cài đặt ở số /usr/local và một cài đặt khác có thể là /usr.

Ngoài ra, bạn có thể thử cài đặt virtualenvwrapper và thiết lập môi trường python riêng biệt để giảm bớt bất kỳ xung đột nào bạn có thể gặp phải. Here là hướng dẫn cài đặt và sử dụng virtualenv.

+1

Làm thế nào để thực hiện điều đó một cách chính xác? Bạn có thể xây dựng thêm một chút không? Cảm ơn. –

+1

Để được trợ giúp thêm, tôi cần biết bạn đã cài đặt phiên bản Python nào, cách bạn cài đặt chúng và cách bạn khởi động ứng dụng của mình. Vui lòng chỉnh sửa câu hỏi của bạn để cung cấp cho tôi thông tin này. –

+1

Không cần. Các giải pháp Virtualenv làm việc cho tôi và có vẻ là một cách tốt hơn để làm mọi thứ di chuyển về phía trước anyway. Sẽ thích một ngón tay cái lên nếu bạn nghĩ rằng câu hỏi có thể có lợi cho người khác. Chúc mừng. –

Các vấn đề liên quan