2009-12-27 76 views
1

我在VMware Fusion下運行Linux VM(Ubuntu 9.10)中的數據庫服務器,但在Mac端編碼Django。安裝mysql-python需要在Mac上安裝MySQL,以便將_mysql.so編譯爲site-packagesmysql-python:在Mac OS X上構建完全獨立的_mysql.so?

但是,完成這一步之後,我沒有進一步使用Mac上的MySQL,而只是刪除它。當然,當_mysql.so需要/usr/local/mysql/lib/libmysqlclient_r.16.dylib時,這是不可能的。

有在MySQL-python的site.cfg,其中,設置爲「真」時,顯著增加_mysql.so文件的大小「靜態」的選項,但它仍然依賴於名爲.dylib。

有沒有辦法使.so完全獨立於MySQL是否安裝,即使這意味着使文件巨大?

解決方案(如果存在的話)應該同時適用於10.5和10.6,因爲我暫時將在不同的機器上使用這兩個版本。

回答

3

沒關係,多挖一點後發現自己。其實很簡單,我會在這裏記錄的解決方案的情況下,別人需要它:

  1. 獲得從mysql.com的MySQL源碼包(不是特定於平臺的二進制壓縮包)

  2. 解壓,運行./configure無論任何選擇適合您的目的,但您將需要--enable-static。可以肯定的是,我包括--disable-shared,雖然它可能不是絕對必要的。我用下面的,你可能會在其他的次數不同:

    $ ./configure --prefix=/usr/local/mysql-src/ --enable-static --disable-shared --with-charset=utf8 --with-extra-charsets=ascii,binary,latin1 --with-collation=utf8_general_ci
    $ make
    $ sudo make install

    (關於這裏的字符集和校對參數:他們可能會在這個用例完全沒有必要的,因爲我之後要刪除MySQL,但由於所有的客戶端連接都使用一些字符集/排序規則,因此我將覆蓋UTF-8的基數,以防MySQLdb使用的默認字符集/排序規則受_mysql.so編譯 - 明智的m恩比我可能要確認這一點的一種方式或其他)。

  3. 獲得從http://pypi.python.org/pypi/MySQL-python

  4. 的mysql-python的最新源碼包,解壓之後,在site.cfg設置static = Truemysql_config = /usr/local/mysql-src/bin/mysql_config(或者其他路徑你在configure期間選擇了)。

  5. 運行python setup.py build。編譯結束時可能會出現一些與體系結構相關的錯誤,但可以忽略它們。

  6. 運行sudo python setup.by install。這會在site-packages目錄中創建一個.egg,並將其添加到easy_install.pth文件中。

  7. 你完成了!現在可以刪除MySQL的所有跟蹤以及mysql-python源代碼。這個蛋可以照原樣複製到運行相同版本OS X的其他Mac上。我們愉快地將它複製到我們說的virtualenv創建的各種虛擬環境中。

這對10.5工作,我會很快測試它,如果需要做不同的事情,請在這裏報告結果。

+1

按照指示在10.6上正常工作。 – 2009-12-29 14:57:33

+1

我發現'--disable-shared'是靜態構建所必需的。 – 2010-01-15 02:57:35

+0

我必須添加這些環境變量CFLAGS = -fPIC CXXFLAGS = -fPIC來配置。否則,構建MySQLdb將會失敗。 – tianyapiaozi 2014-04-03 09:04:26

2

我登陸這裏試圖建立一箇舊的Linux上的靜態MySQLdb。我發現,MySQL的已經過渡到CMake的:

我是能夠建立一個靜態的MySQL這樣的:

# set INSTALL to taste, run from where you extracted the tar file 
SOURCE=$(pwd) && mkdir bld && cd bld && 
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL -DWITH_PIC=ON -DDISABLE_SHARED=ON \ 
     -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=ascii,binary,latin1 \ 
     -DDEFAULT_COLLATION=utf8_general_ci \ 
     $SOURCE 

聲明同時「WITH_PIC = ON」和「DISABLE_SHARED = ON」,這似乎是直覺ive,但要構建可動態加載的MySQLdb python模塊,需要使用-fPIC構建所有的mysql靜態庫。