起動作業ディレクトリの場合 (スクリプトの最初の行の 1 つとして):
ini_path = os.getcwd()
スクリプトへのパスには、sys.path[0]を使用します。
テストコード (自宅でこれを試してください):
import sys, os, inspect
ini_path = os.getcwd()
def ppaths(d=''):
print('sys.path[0]: {}'.format(sys.path[0]))
print('ini_path: {}'.format(ini_path))
print('os.getcwd: {}'.format(os.getcwd()))
print('inspect.getfile: {}'.format(inspect.getfile(inspect.currentframe())))
print('os.dirfile: {}'.format(
os.path.dirname(inspect.getfile(inspect.currentframe()))))
if d:
print('==== Changing to "{}" '.format(d))
os.chdir(d)
print()
ppaths('/')
ppaths('Users')
ppaths()
私のシステム(エディター内から実行)では、次のように出力されます。
sys.path[0]: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
ini_path: /Users/andrew
os.getcwd: /Users/andrew
inspect.getfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup/untitled text 3-367027656.416
os.dirfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
==== Changing to "/"
sys.path[0]: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
ini_path: /Users/andrew
os.getcwd: /
inspect.getfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup/untitled text 3-367027656.416
os.dirfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
==== Changing to "Users"
sys.path[0]: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
ini_path: /Users/andrew
os.getcwd: /Users
inspect.getfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup/untitled text 3-367027656.416
os.dirfile: /private/var/folders/00/kbqj5nt54m99z5gyffy8fksm0000gp/T/Cleanup At Startup
次に、Bash から実行します。
kitchen:SO andrew$ pwd
/Users/andrew/bin/SO
kitchen:SO andrew$ ls ins.py
ins.py
kitchen:SO andrew$ ./ins.py
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin/SO
os.getcwd: /Users/andrew/bin/SO
inspect.getfile: ./ins.py
os.dirfile: .
==== Changing to "/"
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin/SO
os.getcwd: /
inspect.getfile: ./ins.py
os.dirfile: .
==== Changing to "Users"
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin/SO
os.getcwd: /Users
inspect.getfile: ./ins.py
os.dirfile: .
kitchen:SO andrew$
Bash の別のディレクトリから実行します。
kitchen:SO andrew$ cd ..
kitchen:bin andrew$ ./SO/ins.py
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin
os.getcwd: /Users/andrew/bin
inspect.getfile: ./SO/ins.py
os.dirfile: ./SO
==== Changing to "/"
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin
os.getcwd: /
inspect.getfile: ./SO/ins.py
os.dirfile: ./SO
==== Changing to "Users"
sys.path[0]: /Users/andrew/bin/SO
ini_path: /Users/andrew/bin
os.getcwd: /Users
inspect.getfile: ./SO/ins.py
os.dirfile: ./SO
すべての場合においてsys.path[0]
、起動スクリプトの絶対パスを指します。
起動して機能させるos.getcwd()
には、スクリプトの名前への先頭のパスを解析する必要があることがわかります。さらに作業が必要です....
このSO投稿の詳細。