0

暗い歴史からの何らかの理由で、私たちは長い間 Windows で pyodbc を使用してシステムを実行してきましたが、それは odbc と呼ばれています。

Linux に移植しようとして、pyodbc をインストールしましたが、「pyodbc のインポート」は正常に機能しますが、実行時間の長いコードでは「odbc のインポート」ができません。

1 つの解決策は、"if sys.plateform.find('linux')" を実行し、"pyodbc を odbc としてインポート" または "pyodbc をインポート" することですが、それはハッキーに思えます。

卵の名前を変更する方法はありますか?

単純に 2 つのファイルの名前を変更してみましたが、「odbc のインポート」でそれらのファイルが見つかりました。. . しかし、内部命名のために混乱しているようです:

  ファイル「/local/mnt/workspace/aswp401/source/qcom/qct/modem/arch/sandbox/fmerrow/hub/py/utils/dbutils.py」の 1 行目
    インポートODBC
ImportError: 動的モジュールは init 関数を定義していません (initodbc)

もちろん問題は、関数の名前がinitodbcではなくinitpyodbcであることです。

そのような名前を変更する公式の方法はありますか? それとも sys.platform が私の最良の選択肢ですか?

フランク

4

1 に答える 1

0

これを処理する最も簡単な方法は次のとおりです。

try:
    import pyodbc
except ImportError:
    import odbc as pyodbc

やむを得ない理由がない限り、どれがインストールされるかを推測しようとせず、ただ試してみてください。これはEAFPのケースですが、通常の利点に加えて、推測が後で無効になっても機能し続けるという事実があります (たとえば、OpenBSD マシンをセットアップしたため、Windows マシンでパッケージをアップグレードしたため、 …)。

一般的には、最初にモジュールの公式の現在の名前を試してから、older/variant/etc を試したほうがよいでしょう。フォールバックとして名前を付けます。

また、コード全体で正式な現在の名前を使用することも一般的には良いことですが、 と を実行するコードがすでにたくさんありodbc.thisodbc.that単純な検索と置換または自由に使用できるその他のリファクタリング ツールを信頼していない場合は、代わりにできimport pyodbc as odbcます。


卵の名前を変更するだけでは機能する場合と機能しない場合があります (あなたの場合は機能しないようです)。

少なくとも、パッケージマネージャーを混乱させます(それがapteasy_installpip、またはその他のものであるかどうかにかかわらず)。たとえば、パッケージをアップグレードまたはアンインストールしたり、それに依存する他のパッケージをインストールしたりできない場合があります。

最悪なことに、それは「ほとんど」動作するかもしれませんが、パッケージの途中にある C 拡張モジュールに埋め込まれたコードが完全修飾モジュール名に依存しており、そのコードがまれなエッジでしか呼び出されないなどの理由で失敗する可能性があります。あなたのアプリの場合。

于 2013-05-22T01:15:09.940 に答える