Làm thế nào để cài đặt MySQLdb (thư viện truy cập dữ liệu Python vào MySQL) trên Mac OS X?


99

Tôi là một người mới sử dụng Python, nhưng tôi vừa dành một ngày để tìm cách làm cho MySQLdb hoạt động bình thường và vũ trụ theo google bao gồm nhiều tài liệu tham khảo về PITA nó là gì và một số lượng lớn các hướng dẫn dường như lỗi thời. Cho rằng trang web này nhằm giải quyết những loại vấn đề này và tôi biết rằng tôi sẽ cần tham chiếu đến giải pháp trong tương lai, tôi sẽ đặt câu hỏi, cung cấp câu trả lời của mình và xem điều gì khác nổi lên bề mặt.

Vậy câu hỏi đặt ra là làm thế nào để MySQLdb hoạt động trên Mac OS X?

Câu trả lời:


133

Cập nhật cho những người sử dụng Python3: Bạn chỉ cần sử dụng conda install mysqlclientđể cài đặt các thư viện cần thiết để sử dụng MySQLdb vì nó hiện đang tồn tại. Câu hỏi SO sau đây là một manh mối hữu ích: Python 3 ImportError: Không có mô-đun nào có tên 'ConfigParser' . Cài đặt mysqlclient sẽ cài đặt mysqlclient, mysql-connector và llvmdev (ít nhất, nó đã cài đặt 3 thư viện này trên máy của tôi).

Đây là câu chuyện về kinh nghiệm lan man của tôi với vấn đề này. Rất thích xem nó được chỉnh sửa hoặc tổng quát nếu bạn có kinh nghiệm tốt hơn về vấn đề này ... hãy áp dụng một chút phép thuật SO đó.

Lưu ý: Nhận xét trong đoạn tiếp theo áp dụng cho Snow Leopard, nhưng không áp dụng cho Lion, có vẻ như yêu cầu MySQL 64-bit

Trước tiên, tác giả (vẫn là?) Của MySQLdb nói ở đây rằng một trong những vấn đề nguy hiểm nhất là OS X được cài đặt với phiên bản Python 32 bit, nhưng hầu hết các joes trung bình (bao gồm cả tôi) có thể nhảy sang cài đặt phiên bản 64 bit của MySQL. Di chuyển xấu ... hãy gỡ bỏ phiên bản 64 bit nếu bạn đã cài đặt nó (hướng dẫn về tác vụ khó xử này có trên SO tại đây ), sau đó tải xuống và cài đặt phiên bản 32 bit (gói tại đây )

Có rất nhiều bước về cách xây dựng và cài đặt các thư viện MySQLdb. Chúng thường có những khác biệt tinh tế. Điều này dường như phổ biến nhất đối với tôi và cung cấp giải pháp hiệu quả. Tôi đã tái tạo nó với một vài chỉnh sửa bên dưới

Bước 0: Trước khi bắt đầu, tôi giả sử rằng bạn đã cài đặt MySQL, Python và GCC trên mac.

Bước 1: Tải xuống bộ điều hợp MySQL cho Python mới nhất từ SourceForge.

Bước 2: Giải nén gói đã tải xuống của bạn:

tar xzvf MySQL-python-1.2.2.tar.gz

Bước 3: Bên trong thư mục, làm sạch gói:

sudo python setup.py clean

COUPLE OF EXTRA BƯỚC, (từ nhận xét này )

Bước 3b: Xóa mọi thứ trong thư mục MySQL-python-1.2.2 / build / * của bạn - không tin tưởng "python setup.py clean" sẽ làm điều đó cho bạn

Bước 3c: Xóa quả trứng trong Người dùng / $ USER / .python-egg

Bước 4: Ban đầu yêu cầu chỉnh sửa _mysql.c, nhưng bây giờ KHÔNG CẦN THIẾT. Cộng đồng MySQLdb dường như đã sửa lỗi này ngay bây giờ.

Bước 5: Tạo một liên kết tượng trưng dưới lib để trỏ đến một thư mục con có tên là mysql. Đây là nơi nó tìm kiếm trong quá trình biên dịch.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Bước 6: Chỉnh sửa setup_posix.py và thay đổi những điều sau

mysql_config.path = "mysql_config"

đến

mysql_config.path = "/ usr / local / mysql / bin / mysql_config"

Bước 7: Trong cùng một thư mục, xây dựng lại gói của bạn (bỏ qua các cảnh báo đi kèm với nó)

sudo python setup.py build

Bước 8: Cài đặt gói và bạn đã hoàn tất.

sudo python setup.py install

Bước 9: Kiểm tra xem nó có hoạt động không. Nó hoạt động nếu bạn có thể nhập MySQLdb.

python

>>> import MySQLdb

Bước 10: Nếu khi cố gắng nhập, bạn nhận được lỗi phàn nàn rằng Library not loaded: libmysqlclient.18.dylibkết thúc bằng: Reason: image not foundbạn cần tạo một liên kết biểu tượng bổ sung:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Sau đó, bạn sẽ có thể import MySQLdbmà không có bất kỳ lỗi nào.

Tuy nhiên, một trục trặc cuối cùng là nếu bạn khởi động Python từ thư mục xây dựng, bạn sẽ gặp lỗi này:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Module _mysql đã được nhập từ /Library/Python/2.5/ site-package / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, nhưng XXXX / MySQL-python-1.2.3c1 đang được thêm vào sys.path

Điều này khá dễ dàng với Google, nhưng để tránh rắc rối cho bạn, bạn sẽ kết thúc ở đây (hoặc có thể không ... không phải là URL đặc biệt có thể kiểm tra trong tương lai) và tìm ra rằng bạn cần phải cd ..ra khỏi thư mục xây dựng và lỗi sẽ biến mất.

Như tôi đã viết ở đầu, tôi muốn xem câu trả lời này được khái quát hóa, vì có rất nhiều trải nghiệm cụ thể khác về vấn đề khủng khiếp này ngoài kia. Chỉnh sửa hoặc cung cấp câu trả lời của riêng bạn, tốt hơn.


1
Lưu ý rằng Python do Apple cung cấp trên 10.6 (Snow Leopard) thích chạy 64-bit (đó là phổ biến 32-bit / 64-bit). Cũng có những cạm bẫy khác. Trong một thời gian trong series mysql 5.1.x, các tarball OS X do mysql đóng gói đã bị lỗi (được cho là phổ biến nhưng không phải vậy). Bộ điều hợp cơ sở dữ liệu cho Python, MySQLdb, đã có các vấn đề riêng. Đây là một trường hợp mà bạn được khuyên chỉ nên sử dụng MacPorts để tự động xây dựng mọi thứ bạn cần. Nó chỉ là quá dễ dàng cho một cái gì đó sai.
Ned Deily 19/09/09

Tôi sẽ để nó ở đây trong trường hợp nó giúp ích cho bất kỳ ai khác. Tôi cũng phải sửa đổi site.cfg để đặt mysql_config thành đúng đường dẫn. Tôi không nghĩ rằng nó đã có một con đường ban đầu, vì vậy đã được mặc định cho / opt / ..., nhưng tôi cần để trỏ nó đến / usr / local / mysql / ...
tchaymore

8
Tôi cũng phải chạy:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill

1
Tôi cũng đang chạy trên Lion, và tôi đã gặp rất nhiều vấn đề khi làm việc này. Cuối cùng tôi đã tìm thấy câu hỏi và câu trả lời SO tuyệt vời này và làm theo nó 100%. Nó không làm việc cho tôi cho đến khi tôi nói thêm, chính xác như David Underhill đã nói ở trên: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Khi tôi chạy cái này, nó đã nhập như mong đợi ... cuối cùng. Wheewwww. Chỉ là một fyi cho những người ở vị trí tương tự.
John the King

2
Hóa ra tôi đã có các thư viện mysql nhưng không được liên kết đúng cách. Mac OS ElCapitan không cho phép liên kết vào / usr / lib. Vì vậy chỉ cần điều này là đủ cho tôi: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi

101

Một cách nhanh chóng và dễ dàng cho Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) và 10.11 (El Capitan):

Tôi giả sử bạn đã cài đặt XCode, các công cụ dòng lệnh , Python và MySQL.

  1. Cài đặt PIP:

    sudo easy_install pip
  2. Chỉnh sửa ~ / .profile: (Có thể không cần thiết trong Mac OS X 10.10)

    nano ~/.profile

    Sao chép và dán hai dòng sau

    export PATH=/usr/local/mysql/bin:$PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

    Lưu và thoát. Mật ngữ thực hiện lệnh sau:

    source  ~/.profile
  3. Cài đặt MySQLdb

    sudo pip install MySQL-python

    Để kiểm tra xem mọi thứ có hoạt động tốt hay không, chỉ cần thử

    python -c "import MySQLdb"

Nó hoạt động như một cái duyên đối với tôi. Tôi hy vọng nó sẽ giúp.

Nếu bạn gặp lỗi liên quan đến thư viện bị thiếu: Thư viện không được tải: libmysqlclient.18.dylib thì bạn phải liên kết biểu tượng nó để /usr/libthích như vậy:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

2
Cảm ơn bạn, giải pháp này cũng hoạt động trên Mac OSX 10.9 :-)
matsoftware

2
Điều này rất hiệu quả đối với tôi (Yosemite public beta; Mysql 5; Py2.7), nhưng tôi cần thực hiện sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dyliblệnh từ bên dưới.
Michael Scott Cuthbert

Câu trả lời tốt. Tôi đã có những định nghĩa khác của DYLD_LIBRARY_PATH trong .bash_profile tôi, vì vậy tôi đã thêm nó theo cách nàyexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe

1
Chỉ cần xác minh rằng điều này hoạt động với 10.10.4. Ngoài ra, sử dụng mysql từ homebrew, thay đổi .profile không cần thiết để thực hiện việc này.
Isotopp

1
Sau khi cài đặt MySQL với brew install mysql, tôi không phải thực hiện bước thứ 2.
dav.garcia

36

Cài đặt mysql và python thông qua Macports Những người khuân vác đã thực hiện tất cả công việc khó khăn.

sudo port install py26-mysql 
sudo port install mysql5-server

nên cài đặt những gì bạn cần. (xem Tràn ngăn xếp để biết nhận xét về máy chủ mysql )

Nếu bạn chỉ cần kết nối với mysql và không chạy máy chủ thì dòng đầu tiên là đủ.

Macports bây giờ (đầu năm 2013) sẽ cung cấp các bản tải xuống nhị phân cho các kết hợp phổ biến của hệ điều hành một kiến ​​trúc thực thi, cho những người khác (và nếu bạn yêu cầu), nó sẽ xây dựng từ nguồn.

Nói chung macports (hoặc fink) trợ giúp khi có các thư viện phức tạp, v.v. cần được cài đặt.

Chỉ có mã Python và nếu các phụ thuộc C đơn giản có thể được thiết lập thông qua setuptools, v.v., nhưng nó bắt đầu phức tạp nếu bạn kết hợp cả hai.


3
Lưu ý rằng khi bắt đầu sử dụng MacPorts, hãy đảm bảo rằng đường dẫn của bạn thích / opt / local / bin hơn / usr / bin vì MacPorts cài đặt những thứ trong / opt / local.
Teemu Kurppa 19/09/09

4
Đúng! Và bỏ qua dòng thứ hai nếu bạn chỉ cần kết nối với một máy chủ MySQL hiện có. Thật không may, với số lượng phụ thuộc liên quan, việc cố gắng sử dụng python với mysql trên OS X là một trường hợp dễ dàng cho phép MacPorts cài đặt phiên bản python bổ sung hơn là cố gắng tự chơi trình quản lý gói.
Ned Deily 19/09/09

Như một phụ chú, nếu bạn nhận được cảnh báo không dùng nữa, trang sau có bản sửa lỗi: bug.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor

4
FYI, nếu bạn chỉ thực hiện dòng đầu tiên (ít nhất với py27-mysql), thì dù sao thì nó cũng sẽ cài đặt mysql5. Bằng cách tải xuống và biên dịch nguồn. Có lẽ không phải những gì bạn muốn. Grr.
Ben Hardy

@BenHardy - tất cả đều được cài đặt theo ý bạn và chính xác là ý của tôi - giờ đây các tệp thực thi của Lion và Snow Leopard cũng được macports xây dựng tập trung nên sẽ không thực hiện biên dịch cục bộ trong hầu hết các trường hợp.
mmmmmm

15

Cài đặt pip:

sudo easy_install pip

Cài đặt bia:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Cài đặt mysql:

brew install mysql

Cài đặt MySQLdb

sudo pip install MySQL-python

Nếu bạn gặp sự cố biên dịch, hãy thử chỉnh sửa tệp ~ / .profile như một trong các câu trả lời ở đây.


Cảm ơn! Điều này đã hoạt động trên Sierra [OSX 10.12.6 (16G29)].
Haranadh

curl: (22) URL được yêu cầu trả về lỗi: 404 Not Found
Thirupathi Thangavel

đã làm điều này nhưng pip install mysqlclientthay vào đó. Làm!
jeremysprofile

13

Đây là một bước khác mà tôi phải thực hiện, sau khi nhận được lỗi khi hoàn thành Bước 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Tham khảo: Cảm ơn! http://ageekstory.blogspot.com/2011_04_01_archive.html



4

Chỉ gặp sự cố này (một lần nữa!) Sau khi nhận được một hộp Lion mới.

Giải pháp tốt nhất mà tôi đã tìm thấy (vẫn chưa tối ưu 100%, nhưng đang hoạt động):

bạn có thể tải xuống bằng cách tải xuống Công cụ XCode / Dev từ Apple - đây là một bản tải xuống lớn -

... nhưng thay vào đó, tôi đề xuất github này có những gì bạn cần (và không có XCode): https://github.com/kennethreitz/osx-gcc-installer

Tôi đã tải xuống PKG dựng sẵn của họ cho sư tử, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • đảm bảo bạn đã tải xuống phiên bản 64-BIT của Cộng đồng MYSQL. (Cài đặt DMG là một lộ trình dễ dàng) http://dev.mysql.com/downloads/mysql/

  • Đặt đường dẫn như sau:

    xuất PATH = $ PATH: / usr / local / mysql-XXXX

    xuất DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    xuất ARCHFLAGS = '- Arch x86_64'

LƯU Ý RẰNG:

1 trong mysql-XXXX ở trên, XXX là phiên bản cụ thể mà bạn đã tải xuống. (Có thể / usr / local / mysql / cũng sẽ hoạt động vì đây rất có thể là một bí danh giống nhau, nhưng tôi sẽ không giả vờ biết thiết lập của bạn)

2 Tôi đã thấy nó đề xuất rằng ARCHFLAGS được đặt thành '-arch i386 -arch x86_64' nhưng chỉ định x86_64 dường như hoạt động tốt hơn đối với tôi. (Tôi có thể nghĩ ra một số lý do cho điều này nhưng chúng không liên quan chặt chẽ).

  • Cài đặt con thú!

    easy_install MySQL-python

  • BƯỚC CUỐI CÙNG:

Thêm vĩnh viễn DYLD_LIBRARY_PATH!

Bạn có thể thêm nó vào bash_profile của mình hoặc tương tự. Đây là bước còn thiếu đối với tôi, nếu không hệ thống của tôi tiếp tục nhấn mạnh vào các lỗi khác nhau khi tìm _mysql.so, v.v.

xuất DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, vừa mới nhận thấy giải pháp liên kết mềm của bạn, có thể thực hiện điều tương tự như giải pháp PATH của tôi ... các bạn, bất cứ điều gì phù hợp nhất với bạn.

Tham khảo tốt nhất: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/


4

Bạn có thể thử sử dụng pure-python pymysql:

sudo easy_install pymysql

(Hoặc sử dụng pipnếu bạn đã cài đặt nó.) Sau đó, thêm điều này trước khi bạn import MySQLdbvào mã của bạn:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

3

Hoặc đơn giản hãy thử:

> sudo easy_install MySQL-python

Nếu nó báo lỗi như bên dưới:

EnvironmentError: không tìm thấy mysql_config

, sau đó chỉ cần chạy cái này

> export PATH=$PATH:/usr/local/mysql/bin

0

Nếu bạn đang sử dụng MySQL 64 bit, sử dụng ARCHFLAGS để chỉ định kiến ​​trúc cpu của bạn trong khi xây dựng thư viện mysql-python sẽ thực hiện thủ thuật:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install

0
export PATH=$PATH:/usr/local/mysql/bin/

sẽ khắc phục sự cố cho bạn vì hệ thống không thể tìm thấy tệp mysql_config.


0

Trên macos Sierra, công việc này đối với tôi, nơi python được quản lý bởi anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

Việc sử dụng với SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (mặc định, ngày 20 tháng 12 năm 2016, 23:05:08) [GCC 4.2.1 Tương thích Apple LLVM 6.0 (clang-600.0.57)] trên darwin Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin. Anaconda được mang đến cho bạn bởi Continuum Analytics. Vui lòng kiểm tra: http://continuum.io/thankshttps://anaconda.org

>>> from sqlalchemy import *

>>> dbengine = create_engine ('mysql: // ....')


0

Câu trả lời này là bản cập nhật, vào khoảng tháng 11 năm 2019. Không có bản cài đặt pip phổ biến nào sẽ cung cấp cho bạn thiết lập hoạt động trên MacOS 10.13 (và có thể là các phiên bản khác). Đây là một cách đơn giản mà tôi đã làm cho mọi thứ hoạt động:

brew install mysql
pip install mysqlclient

Nếu bạn cần trợ giúp cài đặt brew, hãy xem trang web này: https://brew.sh/


0

Tôi gặp phải vấn đề này và nhận thấy rằng mysqlclientcần biết nơi tìm openssl và OSX ẩn điều này theo mặc định.

Xác định vị trí openssl bằng brew info openssl, sau đó thêm đường dẫn tới opensslthùng rác vào PATH của bạn:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Tôi khuyên bạn nên thêm nó vào .zshrc hoặc .bashrc của bạn để bạn không cần phải lo lắng về nó trong tương lai. Sau đó, với biến đó được xuất (có thể sửa chữa việc đóng và mở lại phiên bash của bạn), hãy thêm hai biến env khác:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Sau đó, cuối cùng, chạy:

pipenv install mysqlclient

và nó sẽ cài đặt tốt.

Nguồn: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.