FAQ¶
"No backend available" エラーを修正するにはどうすればいいですか?¶
通常、この問題には次の4つの原因が考えられます:
あなたが libusb ライブラリをインストールしていない場合。
あなたが libusb ライブラリを標準の共有ライブラリパス置いてない場合。
あなたの libusb のバージョンがとても古い場合。
あなたの PyUSB バージョンがとても古い場合。
何が問題なのかをデバッグするには、あなたの環境で以下のスクリプトを実行します:
import os
os.environ['PYUSB_DEBUG'] = 'debug'
import usb.core
usb.core.find()
これにより、デバッグメッセージがコンソールに出力されます。 それでも何が起こっているのか分からないときは、当該のデバッグ出力を掲載して、メーリングリストに助けを求めてください。
Windowsにlibusbをインストールするにはどうすればいいですか?¶
libusb または libusb-win32 をWindowsにインストールするには、 zadig を使用してください。
Zadigはlibusb-1.0.dllをインストールしないため、libusb 1.0バックエンドを使用するには、Pythonインストールの適切な場所にlibusb-1.0.dllを配置する必要があることに注意してください。
指定のバックエンドの使用を強制するにはどうすればいいですか?¶
libusb1 バックエンド使用例:
>>> import usb.core
>>> from usb.backend import libusb1
>>> be = libusb1.get_backend()
>>> dev = usb.core.find(backend=be)
libusb ライブラリ・パスをバックエンドに渡すにはどうすればよいですか?¶
tutorial の Specify libraries by hand (邦訳:ライブラリを手動で指定する) を参照。
選択した構成(configuration)の、すでに構成(configured)されているデバイスで set_configuration() を 呼び出す/呼び出さない 方法は?¶
通常、 set_configuration()
はデバイスの初期化中に呼び出されます。 libusb documentation の libusb_set_configuration()
は次のように述べています:
あなたが、選択した構成(configuration)で既に構成(configure)されているデバイスでこの関数を呼び出すと、この関数は軽量のデバイスリセット(lightweight device reset)として機能します。すなわち、当座(current)の構成(configuration)を使用してSET_CONFIGURATIONリクエストを発行し、ほとんどのUSB関連デバイスの状態をリセットします(altsettingをゼロにリセットし、エンドポイントをクリアし停止、resetをトグル)。
したがって、その後 write()
を呼び出すと、タイムアウトエラーが発生します。
この動作に対する解決策の一つは、 configuration selection and handling (構成(configuration)の選択と処理)で説明されているように、現在アクティブな構成を検討することです。 "必要な構成(configuration)が既にアクティブである場合、構成(configuration)を選択する必要はありません"
try:
cfg = dev.get_active_configuration()
except usb.core.USBError:
cfg = None
if cfg is None or cfg.bConfigurationValue != cfg_desired:
dev.set_configuration(cfg_desired)