0
from os import listdir
modo= [name.split(".py")[0] for name in listdir("scripts") if name.endswith(".py")]
modules = {}
for modu in modo:
    modules[modu] = __import__(modu)
test_samp.function("test") 

こんにちは!たとえば、「test_samp.py」がscriptsディレクトリに存在する場合、なぜこれでtest_samp.function( "test")を実行できないのですか?それは戻ります:

Unhandled exception in thread started by <function function at 0x8e39204>
Traceback (most recent call last):
  File "test_this.py", line 6, in function
    test_samp.function("test")  
NameError: global name 'test_samp' is not defined
4

3 に答える 3

2

コードには2つの問題があります。

  • __import__グローバル名前空間にインポートせず、モジュールを返します
  • インポートしようとしtest_sampているのはscripts.test_samp

あなたが実際に欲しいのは:

scripts = __import__("scripts", fromlist=modo)
scripts.test_samp.function("test") 

上記は、すべてのサブモジュールがロードされたパッケージを__import__返します。ディレクトリを作成してパッケージにするscriptsことを忘れないでください。scripts__init__.py

参照:Pythonの__import__がfromlistを必要とするのはなぜですか?

于 2012-04-17T11:01:48.057 に答える
1

あなたはあなたが定義test_sampしていることを定義していませんmodules['test_samp']。さらに、スクリプトに含まれている場合は、インポートする必要がありますscripts.test_samp

場合によっては、パッケージを使用します。空の(または追加しない)__init__.py(2つのアンダースコアを含む)を追加します。を使用しますimport scripts。を使用して関数にアクセスしますscripts.test_samp.function("test")reload(scripts)そして、すべてのパッケージをリロードするために使用できます。

于 2012-04-17T10:51:46.293 に答える
1

これを使用して実行できます。

modules["test_samp"].function("test")
于 2012-04-17T10:53:10.750 に答える