7

非組み込みモジュールがインポートされると、インタプリタはで指定された場所を検索しますsys.pathsys.pathこれらの場所(http://docs.python.org/library/sys.html#sys.path)から初期化されます:

  1. 入力スクリプトを含むディレクトリ(または現在のディレクトリ)
  2. PYTHONPATH
  3. インストールに依存するデフォルト

最初の2つの情報源は単純明快ですが、3番目の情報源がどのように機能し、それに影響を与える可能性があるかを誰かが説明できますか?

私は一般的な解決策に興味がありますが、私の特定の問題は次のとおりです。

  • Enthoughtディストリビューション7.232ビットをインストールしてから、Scipy- Superpackをインストールしました。これで、enthought pythonは/Library/Python/2.7/、enthought site-packagesからではなく、superpackがインストールした場所からnumpyをインポートしようとします。
  • wxPythonで作成されたアプリケーションは、でアプリケーションを起動したときpy2app -Aと同じではありません。 sys.pathpython start_app.py
4

2 に答える 2

3

3番目のソースの基準は、プラットフォームに応じて、コンパイル時(または、より正確には構成時)に設定されます。次に、ファイルなどを介して実行時に展開および追加され.pthます(これは、Python実行可能ファイルがコンパイルされてその3番目のソースに影響を与えると実行できることです)。

Pythonドキュメントのこのページには、ファイルの動作に関するすべての情報と、ビルド時の設定などからの構築.pth方法に関する詳細が記載されています。http://docs.python.org/library/site.htmlsys.path

全体に影響を与えることができるのに、なぜその3番目のソースに具体的に影響を与えたいのかわかりませんsys.path。とにかく、影響を与える3つの方法sys.path(Pythonを再コンパイルしたり、ソースコードにパッチを適用したりすることなく)は次のとおりです。

  1. PYTHONPATH環境変数を介して。
  2. ファイルを作成.pthし、Pythonがパッケージをスキャンする場所にそれらをドロップする。(詳細については、前のリンクを参照してください。)
  3. プログラムで、インポートしsysてから追加または追加するsys.path

    import sys
    sys.path.insert(0, '/this/path/will/be/considered/first')
    

うまくいけば、これらの3つの方法のいずれかがあなたが望むことをするのに役立つはずです。

于 2012-06-11T04:08:33.907 に答える
1

Mac OS X 10.7.5システムでは、Enthoughtpythonが/Library/Python/2.7/でモジュールを探しているという問題もありました。どうやら、これは/Library/Python/2.7/site-packagesにあるファイルeasy-install.pthが原因だったようです。このファイルの拡張子を変更した後、Enthought pythonはEnthoughtモジュールをインポートしました(/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packagesから)。

于 2012-12-12T10:43:38.667 に答える