私の問題は、PythonがWindows/Linux上でモジュールを検索する方法の違いです。PythonモジュールをLinux上でNTFS共有からインポートする
Windowsマシン(NTFS)にディレクトリfoo
があります。これは、同じマシン上で(VirtualBoxのゲスト追加を介して)実行されているUbuntu 10.04仮想ゲストにマウントされています。ここで
bar = 1
が
foo
内部ホスト(勝利7)上のPython(2.5.4)セッションの出力です:
foo
内では、次の内容のファイル
OS.py
(大文字に注意してください)があります
>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
(content of the Python standard os package)
そして、ここでは出力がfoo
でのPython 2.6.5を実行し、ゲスト(Ubuntuの)上にある:
>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar']
だから、両方のプラットフォームで、PythonのLO広告にはfoo/OS.py
と同じファイルopen('os.py')
が使用されます。これは、NTFSでは大文字と小文字を区別しないためです。私が理解していないのは、import
に関する異なる動作です。 foo/OS.py
が両方のプラットフォームでインポートされるか、少なくとも動作が同じであることが予想されます。
この矛盾の原因はありますか?
注:''
は、両方のプラットフォームでsys.path
の最初のエントリです。
Pythonの問題よりもVirtualBoxの問題に似ています... –
@ignacio:あなたはどう思いますか?理論上、ゲストのPythonは、仮想OSで動作していることに気づくべきではありません。少なくとも、ファイルの検索や読み込みなどの操作ではありません。 –
問題はVMで実行されているのではなく、ファイル共有であるということです。何らかの理由でVFSは "OS.py"は "os.py"と同じファイルだと考えています。 –