2009-06-19 11 views
7

私はPythonファイルの中のsys.pathを修正して、ある程度の数を持たせようとしています モジュールの検索パスに特定のライブラリのディレクトリがあります(それは最善の方法ではないかもしれませんが、 ...)。 sys.pathの前にいくつかのパスを挿入すると、私のスクリプトは将来のインポートのためにこれらのパスを考慮していません。私が必要とするそれらのライブラリディレクトリを含む全く新しいリストを作成し、そのリストをsys.pathに割り当てると、それらのインポートが考慮されます。これは正しい動作ですか?私はPython 2.5.4を使用しています。そのような行動につながる可能性のある私の環境からのものなのでしょうか?Python sys.pathの変更が機能しない

一部のコードスニペット: 私が行う場合

 
pathtoInsert1 = " .... " 
pathtoInsert2 = " .... " 
sys.path.insert(0, pathToInsert1) 
sys.path.insert(0, pathToInsert2) 

これは機能しません。パスを考慮しません。

私が行う場合

 
pathList = [pathToInsert1, pathToInsert2] 
sys.path = pathList 

あなたは追加のパスを "挿入" されている方法

おかげ

+4

パスを追加する方法を示すコードを投稿してください。 –

答えて

17

あなたは本当に私たちはあなたを助けることができるようにするためのいくつかのコードをポストする必要があります。しかし、私は教育的な推測をすることができます。まったく新しいリストを作成し、それをsys.pathに割り当てると、それは動作すると言います。私はあなたがこの

sys.path = ["dir1", "dir2", ...] 

しかし、あなたが始まり、それが動作しないでパスを挿入する場合はそのような何かをやっているということを意味すると仮定します。私の推測では、このような挿入メソッドを使用していると思います。

sys.path.insert(0, ["dir1", "dir2"]) 

もしそうなら、これは正しくありません。これは、あなたが代わりにあなたに

["dir1", "dir2", "dir3", ...] 

を与える

​​

を言う必要がありますしかし、あなたはあなたのコードをポストするまで、これはすべての当て推量です

[["dir1", "dir2"], "dir3", ...] 

のように見えるのリストを作成します。これは私のために働いた here

import sys 
sys.path.append("/home/me/mypy") 

から取られたのsys.pathを更新する

1

iPythonでいくつかのディレクトリに分散されたモジュールを使って作業しているときにも同様の問題がありました。その場合、インポートを機能させるには、__init__.pyのモジュールを持つに、モジュールの__init__.pyがあるディレクトリがすべて含まれていることと、正しいディレクトリがsys.pathリストにあることを確認する必要があります。

例えば、私はいくつかのディレクトリに広がっているバーと呼ばれるモジュールが含まれているfooというモジュール、持っている:iPythonで

aerith/foo/bar/__init__.py 
aerith/foo/bar/baz/__init__.py 
bob/foo/bar/__init__.py 
bob/foo/bar/baf/__init__.py 
carol/foo/bar/__init__.py 
carol/foo/bar/quux/__init__.py 

を、私はすでにバズとBAFを輸入し、そしてquuxをインポートしたいと考えていました。

from foo.bar import quux

carolsys.pathではありませんでしたが、sys.path.append('carol')ははImportErrorを固定していなかったので、これは、はImportErrorを与えました。

barモジュールに、__init__.pyのうちの1つが「carol/foo/bar」にあると通知することが必要でした。

foo.bar.__path__.append('carol/foo/bar') 
from foo.bar import quux 
関連する問題