1

やったexport PYTHONPATH=$PYTHONPATH:/home/User/folder/test。次に、私が入っ/home/User/てチェックしたときにpythonを実行しましsys.pathた-それは正しかったです。

>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg', 
'/home/User', '/home/User/folder/test','/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/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

/home/User/folder/test/pics/text/text.txt次に、次のようなファイルを開こうとしました。

>>>file = open('pics/text/text.txt','r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory:

ご覧のとおり、ファイルへのパスの前半はに$PYTHONPATHあり、後半はopen()関数の引数として指定されています。なぜそれが機能しないのですか?何を変更すればよいですか?

(エクスポートされたパス)からpythonを実行し/home/User/folder/test、ファイルを開こうとすると、機能しました。

4

3 に答える 3

7

Openは現在のディレクトリを基準にしており、PYTHONPATHを使用しません。現在のディレクトリは、Pythonがコマンドラインで起動されたときのデフォルトになります。

os.chdirで現在のディレクトリを変更できます

于 2012-09-12T15:42:09.043 に答える
2

私があなたの質問を正しく読んでいるなら、あなたはあなたのデータがモジュールに相対的な場所にあることを望みます。その場合は、次を使用できます。

full_path = os.path.join(os.path.split(__file__)[:-1]+['pics','text','text.txt'])

__file__モジュールへのパスです(を含むmodulename.py)。そのため、そのパスを分割し、modulename.py[:-1])をプルオフして、残りの相対パスを次のように追加します。os.path.join

于 2012-09-12T15:42:21.963 に答える
0

現在のパッケージと比較してスクリプトをインポートしたいときはいつでも、パッケージを使用しません。

sys.path = [os.path.dirname(__file__) + "/../another_dir"] + sys.path
于 2012-09-12T15:56:24.420 に答える