2014-10-13 13 views
5

Tôi muốn sử dụng phiên bản SQLite 3.8 với Python, nhưng mô-đun SQLite3 đang sử dụng phiên bản lỗi thời. Tôi đã cài đặt phiên bản SQLite 3.8.4.3 trên máy Mac của mình, nhưng sqlite3.sqlite_version vẫn trả về 3.7.13.Làm cách nào để nâng cấp phiên bản SQLite được sử dụng bởi mô-đun SQLite3 của Python trên máy Mac?

Tôi đã thực hiện khá nhiều tìm kiếm trên SO và các nơi khác, nhưng dường như không thể tìm thấy câu trả lời dứt khoát.

Cảm ơn!

+0

Bạn cài đặt SQLite 3.8.4.3 như thế nào? Trình cài đặt nhị phân từ sqlite.org, Homebrew, kiểm tra và xây dựng nguồn,…? – abarnert

+0

Tôi tin rằng tôi đã thử tất cả những điều đó. Liệu người ta có chắc chắn rằng phiên bản mới được sử dụng bởi gói python? –

+0

Không, không ai trong số họ sẽ đảm bảo mà không làm điều gì đó bổ sung. Nhưng không ai có thể cho bạn biết làm thế nào để tiến xa hơn mà không biết _which_ một trong những bạn đã làm. (Và nơi các libs kết thúc, và những gì 'PATH' của bạn trông giống như, và vv.) – abarnert

Trả lời

1

Từ ý kiến ​​của bạn, vấn đề của bạn là cài đặt sẵn sqlite 3,7 đến cao hơn trên con đường của bạn hơn bạn của bên thứ ba 3.8 của bạn. Điều này có nghĩa là khi bạn xây dựng pysqlite2, theo mặc định, nó sẽ tìm và sử dụng 3.7 để nó không làm bạn tốt. Và bạn có lẽ không muốn thay đổi xung quanh toàn bộ con đường của bạn chỉ để đối phó với điều này.

Nhưng điều đó là tốt, miễn là 3.8 được tìm thấy đầu tiên tại thời gian xây dựng, nó không quan trọng những gì đến trước khi chạy; đường dẫn đến 3.8 sẽ được đưa vào mô-đun. Có một số cách để làm điều này, nhưng đơn giản nhất là một cái gì đó như thế này:

$ brew install sqlite3 
$ sudo -s 
# LDFLAGS=-L/usr/local/opt/sqlite/lib CPPFLAGS=-I/usr/local/opt/sqlite/include pip2.7 install pysqlite 
# ^D 
$ python 
>>> import sqlite3 
>>> sqlite3.sqlite_version 
'3.7.13' 
>>> import pysqlite2.dbapi2 
>>> pysqlite2.dbapi2.sqlite_version 
'3.8.6' 

Các LDFLAGSCPPFLAGS biến đến từ các đầu ra của bước brew install sqlite3. Nếu bạn đã cài đặt sqlite3 theo cách khác, bạn sẽ cần phải nhận được các giá trị thích hợp — có thể là /usr/local/lib/usr/local/include, nhưng nếu không, hãy tìm kiếm libsqlite3.dylibsqlite3.h.

Lưu ý rằng nếu bạn làm theo chính xác các bước này, bạn sẽ nhận được một phiên bản không chất béo của libsqlite3, có nghĩa là pysqlite2 sẽ không làm việc trong chế độ 32-bit. Tôi nghi ngờ đó là một vấn đề cho bạn, nhưng nếu có, bạn chỉ có thể cài đặt nó --universal, hoặc sử dụng một trình cài đặt khác thay vì Homebrew.

0

Tôi nghĩ cách dễ nhất là cập nhật Python của bạn lên phiên bản mới nhất vì sqlite3 được chuyển bằng Python.

Nếu không, hãy cập nhật gói pysqlite. Dưới Linux có một gói python-sqlite được biên dịch trước.

Bạn có thể làm điều đó bằng cách sử dụng easy_install. Để xây dựng gói này, bạn cần một số gói. Nessecerily xây dựng pysqlite với phiên bản mới được cài đặt sqlite3, trong trường hợp của bạn là 3.8.4.3.

sudo easy_install pysqlite 

hoặc

sudo pip install --upgrade pysqlite 
+0

Tôi đã thử điều đó, nhưng không may mắn. Tôi có cần phải làm gì đó để đảm bảo rằng cài đặt mới của gói pysqlite được xây dựng bằng phiên bản sqlite3 mới không? –

+0

Bạn phải chắc chắn rằng lệnh sqlite đơn giản của bạn sẽ có lệnh mới. Trong đầu ra tòa nhà có thể có một gợi ý mà phiên bản đã được sử dụng. Tôi đã tìm thấy một [câu hỏi] tương tự (https://stackoverflow.com/questions/10984403/how-to-update-python-sqlite-on-mac-osx). – wenzul

+1

'easy_install' (a) đã lỗi thời, và (b) yêu cầu' setuptools' giống như 'pip' (trên thực tế, nó là một phần của' setuptools'), vì vậy bạn không nên giới thiệu nó. – abarnert

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