6

私は2つのpythonファイルを持っています。1 つは 2 番目をインポートしようとしています。私の問題は、2 番目の名前が math.py であることです。名前を変更できません。math.py 内にある関数を呼び出そうとすると、グローバル math モジュールになってしまうため、呼び出すことができません。グローバルではなくローカルファイルをインポートするにはどうすればよいですか? 私はPython 2.7を使用しています。これは(大まかに)私のインポートステートメントです:

cstr = "math"
command = __import__(cstr)

後で試します:

command.in_math_py_not_global()

編集:より完全な例:

def parse(self,string):
    clist = string.split(" ")
    cstr= clist[0]
    args = clist[1:len(clist)]
    rvals = []
    try:
        command = __import__(cstr)
        try:
            rvals.extend(command.main(args))
        except:
            print sys.exc_info()
    except ImportError:
        print "Command not valid"
4

2 に答える 2

3

相対インポートを使用できます:

from . import math

http://docs.python.org/tutorial/modules.html#intra-package-references

于 2012-07-15T08:24:09.493 に答える
3

Python プロセスには、ロードされたモジュールの名前空間が 1 つあります。あなた (または他のモジュール) が何らかの理由で標準モジュールを既にロードしている場合、 orをmath使用して再度ロードしようとすると、既にロードされているモジュールへの参照が返されます。を使用して比較すると、これを確認できるはずです。import__import__()print id(math)print id(command)

の名前は変更できないとおっしゃいましたがmath.py、できることをお勧めします。ユーザーからロードするモジュールの名前を取得しています。関数を実際に使用し__import__()てプレフィックスを追加する前に、これを変更できます。例えば:

command = __import__("cmd_" + cstr)

次に、に名前を変更math.pyするcmd_math.pyと、この競合を回避できます。

于 2012-07-15T04:37:02.903 に答える