問題タブ [python-importlib]

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 投票する
1 に答える
105 参照

python - 他のpythonファイルの一部であるpythonファイル内で関数を呼び出す方法

タイトルは正しくないかもしれませんが、これは私が考えることができる最も近いものです。

argparseを使用して作成されたコマンドラインパーサーのようなファイルsample.pyがあります。引数に基づいて、他の python ファイルを呼び出しています。例 - -C でモジュール オプションをコンパイルします。

モジュール名に基づいて、構成ファイルは module/configuration.py の下にあります

configuration.py ファイルからいくつかの関数を呼び出す必要があります。最善の方法は何ですか。パスは常に異なり、実行時にファイルをインポートする必要があるため、python ファイルをインポートできません。

この問題を解決する方法はありますか?

importlib パッケージについて読んだことがありますが、自分の用途に合わせて動作させることができませんでした。

私のフレームワークの構造:

compile.py ファイルのサンプル

問題は、module_name がコンパイル関数で渡されるため、インポートで使用できないことです。

私の質問は長すぎるか、あまりにも明白すぎるかもしれませんが、私は多くの苦労をしてきました. どんな助けでも大歓迎です。

0 投票する
1 に答える
1671 参照

python - Python 3.4 で imp から importlib に変換する際の問題

プラグインをロードできる Python アプリケーションを作成しました。これらのプラグインは、名前とパスに基づいてロードされます。

私は現在使用しています

そして、この方法でモジュール内のクラスインスタンスを取得します

imp lib は廃止されたので、importlib を使用したいと思います。そして、私のクラスインスタンスを取得する唯一の同様の方法は、使用することでした

ここで奇妙なのは(私はpyCharmをIDEとして使用しています)ということです。コードをデバッグ モードで実行すると、上記のコマンドが正常に機能し、クラス インスタンスが取得されます。ただし、通常、コードを実行すると、次のエラーが発生します。

実行とデバッグに違いがあるのはなぜですか。私がやりたいことを行う別の方法はありますか?

私も試してみました

これも正しいデータを提供しますが、この方法でモジュールをロードできないか、少なくとも方法がわかりません

よろしくアンダース

0 投票する
1 に答える
69 参照

python - WebSocket リモート受信での Python モジュールのリロード

ユーザーが生成したスクリプトを受け取って実行できるPython Webソケットクライアントを作成しようとしています。

私のコードはこれまでのところ次のようになります。

スクリプトを受け取ったように見えますが (テキスト エディターで見ると script.py が更新されます)、どういうわけか新しいバージョンを再読み込みして実行するとうまくいきません (クライアントが再起動/起動されたとき、または既存のスクリプト バージョンが常に実行されます)。スクリプトの先頭にある import ステートメントが省略されている場合、スクリプトはまったく実行されません)。

どんな助けでも大歓迎です。前もって感謝します。

0 投票する
0 に答える
306 参照

python - 文字列から load_dynamic を使用する

文字列からモジュールをロードしようとしていますが、それも.soファイルです。これは機能します:

しかし、モジュールを Python 文字列からロードしたいと考えています。read メソッドを使用してカスタム クラスを作成し、それを渡してみました。

しかし、それは私に言いますTypeError: must be string, not instance。したがって、ファイルへのパスが必要です。とにかく、偽のファイルを作成して代わりに渡すことはできますか? 私はpython3または新しいインポートモジュールを使用することにオープンですimportlibimp簡単に思えました。

これがstring_with_readクラスですが、そのアプローチは現在機能していません。

0 投票する
1 に答える
922 参照

python - imp.load_source の問題:「モジュール」に属性「foo」がありません

任意の数のモジュールで満たされたディレクトリがあり、各モジュールには function のみが含まれていますdo_stuff。例えば:

たとえば、foo_1.py は次のようになります。

do_stuffコードの他の場所から、すべての関数を収集して実行したいと考えています。これはモジュールを使えば簡単だと思いimpます:

ただし、これは次のことにつながります。

ここの一番の答えから、これが道だと思いました。もしそうなら、多分私の構文はオフですか?結局のところ、load_source本当に寛容です:

そうでなければ、何が欠けているのでしょうか?

0 投票する
0 に答える
1234 参照

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

私の質問は、フルパスを指定してモジュールをインポートする方法に似ていますか? ただし、.py ソース ファイルをインポートしているのではなく、.pyd を含むパッケージをインポートしています。

実行時に、動的に生成された C コードから新しいパッケージ モジュールを作成しています。__init__.pyファイルとmod.pyd:を使用してパッケージ Foo を正常に生成します。

私が取り組んでいるサンプルコードは

pyd からspec_from_file_location('foo.bar', '/a/temp/dir/foo/__init__.py')モジュールを使用しようとすると、ロードに失敗します。bar

使用しようとするとspec_from_file_location('foo.bar', '/a/temp/dir/foo/')spec_from_file_locationが返されますNone

使用しようとするspec_from_file_location('foo.bar', '/a/temp/dir/foo/bar.pyd')と、次のエラー スタックが表示されます。

推奨される 4 行の importlib ソリューションの代わりに、MetaPathFinderとの具象クラスを作成することもできますSourceLoader。私のフォローMetaPathFinderはうまくいきますが、Loader正しく実装する方法がわかりません。get_data戻り値は、Python コードの Unicode 表現を想定しています。ローダーのパッケージ構造または pyd コンテンツを返すにはどうすればよいですか?

0 投票する
1 に答える
3742 参照

python - Pyinstallerを使用してコンパイルした後、importlibはモジュールを見つけることができません

importlib を使用して別のスクリプト (sub_script.py) からモジュールをインポートするメイン スクリプトがあります。また、引数を他のスクリプトに渡します。

このコードは (Python main_script.py を使用して) 単独で正常に実行されますが、Pyinstaller でコンパイルした後、次のエラー メッセージが返されます。

私がしようとしました:

__init__.py1)私のフォルダーの下に追加します

または2)sub_script.pyをsub_folderに移動します__init__.py が、どちらも機能します。

Ubuntuでもコンパイルしようとしましたが、同じメッセージが表示されました。

ただし、インポートのみを使用すると、準拠して正常に実行されました。

何か案は?ありがとう!

0 投票する
0 に答える
95 参照

python-3.x - Python3 - 実行前にモジュールに属性を追加する方法は?

アプリケーション: 財務アナリストが、Python コードのスニペットをすばやく作成し、便利な財務関数と共有変数を、インポートや関数の定義などを行うことなく使用できると想像してください。彼らが書きたいコードのフラットソースファイルだけで、他には何もありません。

ソースファイルをモジュールとして動的にロードし(簡単)、ロードされたモジュールに関数と変数を属性として追加する(さらに簡単)ことで、ほとんどそこにたどり着くことができます。問題は、モジュールをロードするとモジュールが実行されることですが、これは早すぎます。未定義関数など

Python 3.x と PEP 402 では、Module Specs とcreate_moduleandexec_module関数が導入されています。モジュールを作成し、属性を追加して実行します。完全。例外create_moduleは返すことができNoneます。そして 3.5 importlib.abc.util、および.machineryコードを参照すると、 create_modulereturnのすべての実装が表示されNoneます。

そのため、代わりに独自のローダー、および/またはインポーター、および/または何か他のものを作成する必要があるかどうか疑問に思っています。ところで、モジュールに追加するよりもモジュールに追加する方が好きですbuiltinsが、builtins機能し、それが私の唯一のオプションである場合は、それを行います。

ありがとう!