問題タブ [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.
python - 他のpythonファイルの一部であるpythonファイル内で関数を呼び出す方法
タイトルは正しくないかもしれませんが、これは私が考えることができる最も近いものです。
argparseを使用して作成されたコマンドラインパーサーのようなファイルsample.pyがあります。引数に基づいて、他の python ファイルを呼び出しています。例 - -C でモジュール オプションをコンパイルします。
モジュール名に基づいて、構成ファイルは module/configuration.py の下にあります
configuration.py ファイルからいくつかの関数を呼び出す必要があります。最善の方法は何ですか。パスは常に異なり、実行時にファイルをインポートする必要があるため、python ファイルをインポートできません。
この問題を解決する方法はありますか?
importlib パッケージについて読んだことがありますが、自分の用途に合わせて動作させることができませんでした。
私のフレームワークの構造:
compile.py ファイルのサンプル
問題は、module_name がコンパイル関数で渡されるため、インポートで使用できないことです。
私の質問は長すぎるか、あまりにも明白すぎるかもしれませんが、私は多くの苦労をしてきました. どんな助けでも大歓迎です。
python - Python 3.4 で imp から importlib に変換する際の問題
プラグインをロードできる Python アプリケーションを作成しました。これらのプラグインは、名前とパスに基づいてロードされます。
私は現在使用しています
そして、この方法でモジュール内のクラスインスタンスを取得します
imp lib は廃止されたので、importlib を使用したいと思います。そして、私のクラスインスタンスを取得する唯一の同様の方法は、使用することでした
ここで奇妙なのは(私はpyCharmをIDEとして使用しています)ということです。コードをデバッグ モードで実行すると、上記のコマンドが正常に機能し、クラス インスタンスが取得されます。ただし、通常、コードを実行すると、次のエラーが発生します。
実行とデバッグに違いがあるのはなぜですか。私がやりたいことを行う別の方法はありますか?
私も試してみました
これも正しいデータを提供しますが、この方法でモジュールをロードできないか、少なくとも方法がわかりません
よろしくアンダース
python - WebSocket リモート受信での Python モジュールのリロード
ユーザーが生成したスクリプトを受け取って実行できるPython Webソケットクライアントを作成しようとしています。
私のコードはこれまでのところ次のようになります。
スクリプトを受け取ったように見えますが (テキスト エディターで見ると script.py が更新されます)、どういうわけか新しいバージョンを再読み込みして実行するとうまくいきません (クライアントが再起動/起動されたとき、または既存のスクリプト バージョンが常に実行されます)。スクリプトの先頭にある import ステートメントが省略されている場合、スクリプトはまったく実行されません)。
どんな助けでも大歓迎です。前もって感謝します。
python - 文字列から load_dynamic を使用する
文字列からモジュールをロードしようとしていますが、それも.so
ファイルです。これは機能します:
しかし、モジュールを Python 文字列からロードしたいと考えています。read メソッドを使用してカスタム クラスを作成し、それを渡してみました。
しかし、それは私に言いますTypeError: must be string, not instance
。したがって、ファイルへのパスが必要です。とにかく、偽のファイルを作成して代わりに渡すことはできますか? 私はpython3または新しいインポートモジュールを使用することにオープンですimportlib
。imp
簡単に思えました。
これがstring_with_read
クラスですが、そのアプローチは現在機能していません。
python - imp.load_source の問題:「モジュール」に属性「foo」がありません
任意の数のモジュールで満たされたディレクトリがあり、各モジュールには function のみが含まれていますdo_stuff
。例えば:
たとえば、foo_1.py は次のようになります。
do_stuff
コードの他の場所から、すべての関数を収集して実行したいと考えています。これはモジュールを使えば簡単だと思いimp
ます:
ただし、これは次のことにつながります。
ここの一番の答えから、これが道だと思いました。もしそうなら、多分私の構文はオフですか?結局のところ、load_source
本当に寛容です:
そうでなければ、何が欠けているのでしょうか?
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 コンテンツを返すにはどうすればよいですか?
python - Pyinstallerを使用してコンパイルした後、importlibはモジュールを見つけることができません
importlib を使用して別のスクリプト (sub_script.py) からモジュールをインポートするメイン スクリプトがあります。また、引数を他のスクリプトに渡します。
このコードは (Python main_script.py を使用して) 単独で正常に実行されますが、Pyinstaller でコンパイルした後、次のエラー メッセージが返されます。
私がしようとしました:
__init__.py
1)私のフォルダーの下に追加します
または2)sub_script.pyをsub_folderに移動します__init__.py
が、どちらも機能します。
Ubuntuでもコンパイルしようとしましたが、同じメッセージが表示されました。
ただし、インポートのみを使用すると、準拠して正常に実行されました。
何か案は?ありがとう!
python-3.x - Python3 - 実行前にモジュールに属性を追加する方法は?
アプリケーション: 財務アナリストが、Python コードのスニペットをすばやく作成し、便利な財務関数と共有変数を、インポートや関数の定義などを行うことなく使用できると想像してください。彼らが書きたいコードのフラットソースファイルだけで、他には何もありません。
ソースファイルをモジュールとして動的にロードし(簡単)、ロードされたモジュールに関数と変数を属性として追加する(さらに簡単)ことで、ほとんどそこにたどり着くことができます。問題は、モジュールをロードするとモジュールが実行されることですが、これは早すぎます。未定義関数など
Python 3.x と PEP 402 では、Module Specs とcreate_module
andexec_module
関数が導入されています。モジュールを作成し、属性を追加して実行します。完全。例外create_module
は返すことができNone
ます。そして 3.5 importlib.abc
、.util
、および.machinery
コードを参照すると、 create_module
returnのすべての実装が表示されNone
ます。
そのため、代わりに独自のローダー、および/またはインポーター、および/または何か他のものを作成する必要があるかどうか疑問に思っています。ところで、モジュールに追加するよりもモジュールに追加する方が好きですbuiltins
が、builtins
機能し、それが私の唯一のオプションである場合は、それを行います。
ありがとう!