web-dev-qa-db-ja.com

Pythonコンパイルされた拡張機能のPyCharmでオートコンプリート

コンパイルされた拡張機能(OpenCV Pythonバインディングなど)を使用してPythonコードを作成する場合、PyCharmはそれらの可用性を認識していないようです。インポートはツールチップとして「未解決の参照」と灰色の下線でマークされ、オートコンプリートも機能しません(コードですでに使用されている関数名を除く)。

これは間違ったモジュールパスが原因ではありません。コードは起動時にエラーなしで実行されます。また、モジュールをPythonシェルにインポートすると、オートコンプリートが期待どおりに機能し始めます。

そのための解決策はありますか、それともこれはコンパイルされた拡張機能のアーキテクチャ上の制限ですか?この問題に対処できる他のIDEはありますか?

25
Latanius

インポートは灰色の下線でマークされ、ツールチップとして「未解決の参照」と表示されます

これはおそらく、PyCharmがインポートしたモジュールを認識できないことを意味します。編集モードでは、PyCharmはインポートされたモジュールのPythonソースの可用性に依存します。モジュールがPythonで書かれていないが、C拡張モジュールである場合、PyCharmは生成します関数プロトタイプを含み、それを完了に使用する「スケルトン」。

シェルモードでは、PyCharmはライブインポートされたオブジェクトを使用して完了しますが、結果はわずかに異なります。

プロジェクト用に選択したPythonインタープリター(ファイル/設定/ Pythonインタープリター))にOpenCVインストールが表示されていることを確認します。インタープリターが正しい場合は、削除してから再度追加してみてください(これには少し時間がかかります。申し訳ありません)。

何も役に立たない場合は、 バグを報告してください

19
9000

PyCharmは現在、IDEのインタープリターに手動で追加されたパスにあるコンパイル済みの拡張機能/バイナリをスキャンしません。 YouTrack でJetbrainsにバグを報告しました。あなたはそれとおそらく私が彼らのディスカッションフォーラムで始めた議論を見たいと思うかもしれません(リンクはバグの説明にあります)。同じ問題に直面しているPyCharmユーザーの場合、YouTrackでこの問題を解決するために投票していただければ幸いです。

3
Volker Schmitz

ファイル|の「リロード」ボタンをクリックしてみてください設定| IDE設定| Pythonインタープリター。それでうまくいきました。

3
Simon

インポート方法によってpycharmの動作に違いがあることに気づきました。使用:

import cv2

オートコンプリートが機能しない、

と一緒に:

from cv2 import cv2

オートコンプリートは機能します

2
jo_

バイナリをインタプリタのlib-dynloadフォルダにハードリンクする必要がありました。

$ cd /usr/lib/python3.7/lib-dynload
$ Sudo ln /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.cpython-37m-x86_64-linux-gnu.so cv2.cpython-37m-x86_64-linux-gnu.so

パスは環境によって異なる場合があります。 OSXやWindowsではテストしていませんが、そこでも動作する可能性があります。 lib-dynloadフォルダーはここにあります: Project Structure

0
Sadap

OS X10.8とPyCharm3の私の場合、IDEはPythonのさまざまなインストールを自動的に選択していました。EclipsePydevでこれに気づき、正しいものを選択して期待どおりに機能しました。 2つの違いに気付くのは簡単ではありません:/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python

0
dvitonis

私はこの質問の指示に従います: WindowsにOpenCVをインストールし、パッケージマネージャーを使用せずにPyCharmで有効にする方法

その後、それは機能せず、私は他の変更なしでpycharm ideを再インストールし、今では完全に機能しています。これが最善の答えではないことはわかっていますが、多くの時間を無駄にしてさまざまな回避策を試した後、これが私の問題を解決するものでした。お役に立てば幸いです。

0
Denis Romasanta