2

rmod2 という名前の Python モジュールをさまざまな方法でインポートしようとすると、一見奇妙な動作に気付きました。rmod2.pyファイルがあるディレクトリから python を起動すると、正常に動作します。ただし、ファイルを他のモジュールが配置されている別のフォルダーに移動すると、期待どおりに機能しなくなります。モジュール/パッケージ フォルダーは/usr/lib/pymodules/python2.7であり、 sys.pathにも含まれています。そのため、フォルダー/usr/lib/pymodules/python2.7/rmod2を作成し、そこに空の__init__.pyrmod2.pyを配置しました。__init__.pyがない場合は、次のようになります。

>>> import rmod2
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ImportError: No module named rmod2

__init__.pyファイルを使用すると、インポートは機能しているように見えますが、パッケージは空です:

>>> import rmod2
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'rmod2']
>>> dir(rmod2)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> rmod2.__path__
['/usr/lib/pymodules/python2.7/rmod2']
>>> rmod2.__file__
'/usr/lib/pymodules/python2.7/rmod2/__init__.py'

誰かが何が起こっているのか、またインポート時にモジュールの内容を実際にロードするように修正する方法を教えてもらえますか?

4

2 に答える 2

1

代わりに、モジュールが配置されているディレクトリへのパスをsys.path変数に追加するrmod.py、モジュールをパス上のディレクトリに直接追加します(サブディレクトリではありません)。

ディレクトリに追加__init__.pyすることで、代わりにPythonパッケージに変換し、インポート可能にします。それが意図したものである場合は、rmod-the-moduleをrmod-the-package内に移動し、その名前空間を介してインポートできます。

from rmod2 import rmod2
于 2013-03-01T16:06:14.177 に答える
0

パッケージのモジュールにパッケージからアクセスできないことがありましたが、直接インポートすると機能しました。__all__おそらくパッケージに欠落している__init__.py

これはうまくいきませんでした:

import mypkg obj = mypkg.mymodule.MyClass()

これはうまくいきました:

import mypkg.mymodule
obj = mypkg.mymodule.MyClass()
于 2015-12-09T10:57:34.587 に答える