1

私のsys.pathは以下のようなものです:

/homel/ychao/python/python_lib
/usr/lib64/python27.zip
/usr/lib64/python2.7
/usr/lib64/python2.7/plat-linux2
/usr/lib64/python2.7/lib-tk
/usr/lib64/python2.7/lib-old
/usr/lib64/python2.7/lib-dynload
/usr/lib64/python2.7/site-packages
/usr/lib64/python2.7/site-packages/PIL
/usr/lib64/python2.7/site-packages/gst-0.10
/usr/lib64/python2.7/site-packages/gtk-2.0
/usr/lib64/python2.7/site-packages/wx-2.8-gtk2-unicode
/usr/lib/python2.7/site-packages
/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info
/usr/lib/python2.7/site-packages/IPython/extensions

すべてサブディレクトリ/usr/lib64/python2.7であるいくつかのディレクトリがあることに気づきましたが、どうすればこのようになりますか?すべてのサブディレクトリを削除して、sys.pathを次のようにすると:

/homel/ychao/python/python_lib
/usr/lib64/python2.7
/usr/lib/python2.7/site-packages

以前にインポートできる一部のパッケージは、変更後に失敗します。つまり、これは「インポート」が適切なパッケージを再帰的に見つけることを知らないことを意味しますか?

ありがとう!

4

1 に答える 1

3

つまり、これは「インポート」が適切なパッケージを再帰的に見つけることを知らないことを意味しますか?

それは正しい。のドキュメントでsys.pathは、再帰についてはどこにも言及していません。

実際、モジュールの解決が再帰的である場合、混乱する動作が発生します。検索/usr/lib/python2.7/site-packages/hamパス上にあり、ファイルがあるとします

/usr/lib/python2.7/site-packages/ham
/usr/lib/python2.7/site-packages/ham/ham/util.py

そして、あなたはそうするでしょうimport utilutil.py検索パスに直接またはutil/__init__.pyが見つからなかった場合、再帰処理ham.utilによって間違った名前でインポートされ、Pythonのパッケージ/モジュールの名前空間が無効になります。

于 2012-12-25T13:13:00.963 に答える