0

私は、MySQL と連携する Python で書かれたツールの保守を担当しています。ユーザーは、さまざまなバージョンの Python を使用するさまざまなアプリケーションを通じてこのツールを使用します。

同じアプリケーションのソフトウェア リリース間で、Python のバージョンが異なる場合があります。ユーザーが対話することを選択したアプリケーションを制御することはできません (ただし、それらはすべて Python インターフェースを備えており、OS X で実行されます) が、Python-MySQL の問題を除いて、ほとんどすべてを機能させることができました。具体的には、一部のソフトウェアは Python の 64 ビット バージョンを使用します。その他は 32 ビット版に付属しています。OS X (私がサポートする必要がある OS) には Python と Python-MySQL 32 ビットがインストールされているので、次のようにします。

import MySQLdb 

Python 64 ビットを使用するソフトウェアでは、インポートが失敗し、アプリケーションは OS X に同梱されている MySQL のバイナリが間違ったタイプであると言うでしょう。

Python-MySQL を 64 ビット アプリとしてダウンロード、コンパイル、インストールしましたが、Python-MySQL は Python の卵を使用します。卵は特定のディスクの場所を指すようにハードコーディングされているようです。私のマシンには/usr/local/lib/mysql.

そのパスに 64 ビット バージョンがある場合、ツールは Python 64 ビットのアプリケーションで動作しますが、32 ビット バージョンの Python を使用する他のすべてのツールは失敗します。そのディスクの場所に 32 ビット バージョンの MySQL がある場合、32 ビット ツールは機能し、64 ビット バージョンは必要な処理を停止します。

個別の卵を作成しようとしましたが、卵を指すように変更する64ビットバージョンがありますが、その/usr/local/lib/mysql_x86_64方法がわかりません。また、Python-MySQL をコンパイルしてその場所を指すように設定を変更しようとしましたが、これを行う方法が見つかりません。

今、私はこの件について自分の人生をグーグルで検索していますが、もし私が今書いたことが誰かに鐘を鳴らしたら、私を啓発してくれませんか?

私は Python-MySQL の専門家ではありません。

4

2 に答える 2

0

OSXにMySQLクライアントライブラリの2つの別々のバージョンを用意する必要はありません。同じファイルに32ビットと64ビットの両方のバイナリを持つユニバーサルバージョンをインストールできます。次に、MySQLdbアダプター(python-mysql)のインスタンスを必要な各Pythonにインストールし、ライブラリの1つのユニバーサルバージョンにリンクします。残念ながら、MySQLプロジェクトでは、何らかの理由でユニバーサルバイナリを利用できません。しかし、自分で構築するのは簡単です。HomebrewやMacPortsなどのOSX用のサードパーティのパッケージマネージャーを使用することをお勧めします。私はHomebrewについては知りませんが、個人的な経験から、MacPortsを使用するのは非常に簡単であることを知っています。MacPortsベースをインストールした後、MySQLとそのすべての依存関係を次のコマンドでインストールできます。

port install mysql5 +universal

+universal(編集することで、すべてのポートのデフォルトのバリアントを作成する方が簡単です/opt/local/macports/variants.conf。)これにより、MySQLクライアントライブラリがにインストールされます/opt/local/lib/mysql5/mysql/。次に、他の場所にインストールしたものではなく、そのライブラリディレクトリにリンクしているpython-mysqlパッケージをインストールします。

MacPortsを使用して完全なソリューションをインストールするのはさらに簡単です。つまり、ユニバーサルPython、ユニバーサルMySQLdb、およびMySQLクライアントライブラリをインストールします。

port install py27-mysql +universal

ただし、ユーザーが使用しているPythonを制御できない場合は、おそらく役に立ちません。

于 2012-11-04T05:44:30.440 に答える
0

virtualenvを使用して、異なるインタープリターを使用して個別のPython環境を作成します。

python-MySQLdbは、システムにインストールされている特定のlibに対してリンクしています。各環境は、異なる場所に対してリンクできます。

于 2012-11-04T05:06:48.537 に答える