問題タブ [python-import]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
35 に答える
1209572 参照

python - フルパスを指定してモジュールをインポートする方法は?

フルパスを指定してPythonモジュールをロードするにはどうすればよいですか?

ファイルは構成オプションであるため、ファイルシステムのどこにでも配置できることに注意してください。

0 投票する
18 に答える
366598 参照

python - Pythonで相対インポートを行う方法は?

このディレクトリ構造を想像してみてください。

コーディングmod1しているので、から何かをインポートする必要がありmod2ます。どうすればいいですか?

試しfrom ..sub2 import mod2ましたが、「パッケージ以外で相対インポートを試みました」というメッセージが表示されます。

sys.pathグーグルで検索しましたが、「操作」ハックしか見つかりませんでした。きれいな方法はありませんか?


編集:すべての私__init__.pyのは現在空です

Edit2:sub2には、サブパッケージ(、、など)間で共有されるクラスが含まれているため、これを実行しようとしていsub1ますsubX

Edit3:私が探している動作は、PEP 366で説明されているものと同じです(John Bに感謝)

0 投票する
5 に答える
12196 参照

python - Python の __import__ 関数を使用して、「モジュールから * をインポート」と同等のことを行うにはどうすればよいですか?

モジュール名の文字列が与えられた場合、次のようにモジュール内のすべてをどのようにインポートしますか?

つまり、文字列 S="module" が与えられた場合、次の同等のものを取得するにはどうすればよいですか。

これは期待どおりに実行されないようです (何もインポートしないため)。

0 投票する
5 に答える
4497 参照

python - Python、単体テスト、インポートのモック

私は、大規模なコード ベースのリファクタリングを開始するプロジェクトに参加しています。すぐに発生した問題の 1 つは、各ファイルが他の多くのファイルをインポートすることです。単体テストの作成を開始できるように、実際のコードを変更することなく、単体テストでこれをエレガントな方法でモックするにはどうすればよいですか?

例として: テストしたい関数を含むファイルは、Python コア ライブラリではなく、ソフトウェアの一部である他の 10 個のファイルをインポートします。

単体テストをできるだけ個別に実行できるようにしたいので、今のところ、インポートされているファイルの内容に依存しない関数のみをテストします。

すべての答えをありがとう。

最初は自分が何をしたいのかよくわかっていなかったのですが、今ではわかっていると思います。

問題は、サードパーティの自動魔法のために、アプリケーション全体が実行されている場合にのみ一部のインポートが可能だったことです。そのため、これらのモジュールのスタブを、sys.path で指定したディレクトリに作成する必要がありました。

これで、テストを書きたい関数を含むファイルを単体テスト ファイルにインポートできるようになりました。モジュールが見つからないという不満はありません。

0 投票する
9 に答える
2913 参照

python - 'from X import a' と 'import X; ザ'

私は何人かの Python プログラマーがかなり一貫して次のスタイルを使用しているのを見てきました (スタイル 1 と呼びます):

このスタイルをサポートするために、「明示的は暗黙的よりも優れている」という格言を引用できます。他のプログラマーがこのスタイル (スタイル 2) を使用しているのを見てきました。

スタイル 2 に見られる主な利点は保守性です。特にダック タイピングの理想では、some_module を some_other_module に交換したいと思うかもしれません。また、スタイル 2 は「読みやすさが重要」という格言でポイントを獲得していると感じています。私は反対する傾向がありますが、検索と置換は、最初のスタイルを使用する場合と同様に優れたオプションであると常に主張できます。

補遺:スタイル 1 で からへasの切り替えを解決するために使用できることに注意してください。現在のモジュールに実装することを決定することも一般的であることを忘れていました。これにより、同等のコンテナーの作成が少し厄介になります。some_modulesome_other_modulesome_identifiersome_module

0 投票する
10 に答える
51773 参照

python - Pythonインポートの経験則は何ですか?

Pythonでモジュールをインポートする方法がたくさんあることに少し混乱しています。

私はスコーピングと名前空間について読んでいますが、どのような状況で、なぜ最良の戦略が何であるかについて、いくつかの実用的なアドバイスが欲しいです。インポートはモジュールレベルまたはメソッド/関数レベルで行う必要がありますか?__init__.pyまたはモジュールコード自体に?

私の質問は、明らかに関連していますが、「 Pythonパッケージ-ファイルではなくクラスでインポートする」では実際には答えられません。

0 投票する
6 に答える
19222 参照

python - Python の __import__ が期待どおりに機能しない

ドット付きの名前で使用__import__すると、次のようになります: somepackage.somemodule、返されるモジュールは isn ではなくsomemodule、返されるものはほとんど空のようです! 何が起きてる?

0 投票する
22 に答える
922408 参照

python - 相対パスからモジュールをインポートする

相対パスを指定して Python モジュールをインポートするにはどうすればよいですか?

たとえば、 とが含まdirFooFoo.pyている場合、 にインポートするにはどうすればよいですか?dirBardirBarBar.pyBar.pyFoo.py

視覚的な表現は次のとおりです。

Fooを含めたいと考えてBarいますが、フォルダ階層を再構築することはできません。

0 投票する
6 に答える
23315 参照

python - モジュールが複数回インポートされると、Pythonはモジュールを最適化しますか?

大きなモジュールがコードのサブモジュールによってロードされている場合、モジュールを再度インポートする代わりに、その名前空間からモジュールを参照する利点はありますか?

例: 私は、ReallyBigLib を広範囲に使用するモジュール MyLib を持っています。MyLib をインポートするコードがある場合、そのようにモジュールを掘り出す必要があります

あるいは単に

0 投票する
10 に答える
362893 参照

python - 名前を文字列として指定したモジュールをインポートするにはどうすればよいですか?

私は、引数としてコマンドを受け取るPythonアプリケーションを書いています。次に例を示します。

アプリケーションを拡張可能にする、つまり、メインのアプリケーションソースを変更せずに、新しいコマンドを実装する新しいモジュールを追加できるようにする必要があります。ツリーは次のようになります。

したがって、アプリケーションが実行時に使用可能なコマンドモジュールを見つけて、適切なコマンドモジュールを実行するようにします。

Pythonは、モジュール名の文字列を受け取る__import__関数を定義します。

__import __(name、globals = None、locals = None、fromlist =()、level = 0)

この関数はモジュール名をインポートし、パッケージコンテキストで名前を解釈する方法を決定するために、指定されたグローバルとローカルを使用する可能性があります。fromlistは、nameで指定されたモジュールからインポートする必要があるオブジェクトまたはサブモジュールの名前を示します。

ソース:https ://docs.python.org/3/library/functions.html# import

だから現在私は次のようなものを持っています:

これは問題なく機能します。このコードで行っていることを達成するためのもっと慣用的な方法があるのではないかと思っています。

私は特に卵や拡張ポイントの使用に乗り込みたくないことに注意してください。これはオープンソースプロジェクトではなく、「プラグイン」があるとは思いません。重要なのは、メインアプリケーションコードを簡素化し、新しいコマンドモジュールが追加されるたびにコードを変更する必要をなくすことです。