3

Pythonワークスペースにsip.pydを必要とする2つのモジュールがありますModule1.pyd
はsip.pydを必要とします(v 8.0-8.1を実装します)
Module2.pydはsip.pydを必要とします(v6.0を実装する別のファイル)

だから私は新しいものを選ぶことはできません、それはうまくいきません:私は両方を維持しなければなりません!

(RuntimeError: the sip module implements API v6.0 but the fbx module requires API v8.1)

.pyd拡張子(python dll、編集不可)でモジュールをインポートし、ソースするsip.pydを指定するにはどうすればよいですか?

回避策として、私はそれをなんとか行うことができます:

  1. 1つのsip.pydは、私のルートサイトパッケージの場所にあります。
  2. 他のsip.pydを必要とするモジュールをインポートする必要がある場合は、sys.pathからルートパスを削除し、他のsip.pydがある正確なフォルダーパスを追加します。
  3. モジュールをインポートして、以前のsys.pathを復元できます。
4

3 に答える 3

1

一度に両方のファイルを必要とするコードがないと仮定します。次のことをお勧めします。

  • 両方のファイルを 2 つの別々のディレクトリ (たとえばsip-6.0と と呼びますsip-8.0) にインストールします。site-packages/

  • sip_helper.py次のようなコードでファイルを作成します

sip_helper.py の内容:

import sys
import re
from os.path import join, dirname
def install_sip(version='6.0'):
    assert version in ('6.0', '8.0'), "unsupported version"
    keep = []
    if 'sip' in sys.modules:
       del sys.modules['sip']
    for path in sys.path:
        if not re.match('.*sip\d\.\d', path):
            keep.append(path)
    sys.path[:] = keep # remove other paths
    sys.path.append(join(dirname(__file__), 'sip-%s' % version))
  • sip_helper.py を site_packages (sip-6.0 および sip-8.0 ディレクトリの親ディレクトリ) に配置します。
  • sip_helper.install_sipプログラムの起動時に呼び出す
于 2011-11-28T16:50:15.433 に答える
1

VirtualEnvは、これらのケースを処理するために行われます。

virtualenv は、分離された Python 環境を作成するためのツールです。

virtualenv を使用すると、バージョン 8.x の sip.pyd とバージョン 6.0 の 2 つの環境を作成できます。

于 2011-11-28T16:43:16.513 に答える
0

それが機能するかどうかはわかりませんが(モジュールの名前がその内容と一致する必要がある場合)、名前をsip6.pydresp に変更することはできません. sip8.pydそして、する

if need6:
    import sip6 as sip
else:
    import sip8 as sip

?

于 2011-11-28T16:56:28.140 に答える