1

モジュールをインポートするときの優先順位と、それを変更する方法について混乱しています。

現在のディレクトリには以下が含まれています:

l10n/__init__.py
l10n/moneyfmt.py

追加のパッケージを含む別のディレクトリ (現在とは異なる) には、以下が含まれます。

/opt/l10n/__init__.py
/opt/l10n/utils.py

現在、Python インタラクティブ インタープリターを実行しています。

>>> import sys
>>> sys.path
['', '/usr/lib/python27.zip', '/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload',
'/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/PIL',
'/usr/lib/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info']
>>> import l10n.utils
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named utils    # CORRECT, NOT IN PATH YET
>>> sys.path.insert(0, '/opt')
>>> sys.path
['/opt', '', '/usr/lib/python27.zip', '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7/site-packages',
 '/usr/lib/python2.7/site-packages/PIL',
 '/usr/lib/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info']
>>> import l10n.utils
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named utils    # WHY IT CAN NOT FIND THE MODULE?

sys.path の検索パスにフルパスを追加した後、 l10n.utils モジュールを含むパッケージが見つからないのはなぜですか? ここでは常に現在のディレクトリが優先されますか? 変更できますか?

4

1 に答える 1

2

という名前の 2 つのモジュールがありますl10n。最初に を試みたとき、道import l10n.utilsに誤りl10nがあります。l10nこの間違いは Python シェルによってキャッシュされていると思われimport l10n.utils、2 回目にしようとしたときに参照されます (に加えた変更に関係なくsys.path)。

Python シェルを再起動しsys.path、最初に変更して、import l10n.utilsすぐに実行してみてください。

于 2013-03-02T19:17:48.780 に答える