これは初心者の質問のように思えるかもしれませんが、そうではありません。一部の一般的なアプローチは、すべての場合に機能するわけではありません。
sys.argv [0]
これは、を使用することを意味しpath = os.path.abspath(os.path.dirname(sys.argv[0]))
ますが、別のディレクトリの別のPythonスクリプトから実行している場合は機能しません。これは実際に発生する可能性があります。
__ファイル__
これはを使用することを意味しますがpath = os.path.abspath(os.path.dirname(__file__))
、これは機能しないことがわかりました。
py2exe
__file__
属性はありませんが、回避策があります- IDLEから実行すると属性
execute()
がない__file__
- OS X 10.6の入手先
NameError: global name '__file__' is not defined
不完全な回答のある関連質問:
- Python-実行中のファイルへのパスを見つける
- 現在のファイルへのパスは、プログラムの実行方法によって異なります
- Pythonで実行中のスクリプトのパスを知る方法は?
- ディレクトリをPythonスクリプトのディレクトリに変更します。
上記のすべてのユースケースで機能する一般的なソリューションを探しています。
更新
これはテストケースの結果です:
python a.pyの出力(Windowsの場合)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
木
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
使用していますが、これはIDLEの内部にはありません。これ__file__
はモジュール内でのみ定義されていると考えてください。