13

我有一个存在于“脚本”目录中的可执行 python 脚本,并且在根目录中有一个指向该脚本(用于启动文件)的符号链接。就像是:

.
├── scripts
│   ├── const.py
│   ├── fops.py
│   ├── i_build.py
│   └── i_Props.ini
└── build_i -> scripts/i_build.py

我希望能够通过以下方式启动/运行我的脚本:

python build_i

从根目录。i_build.py 脚本将尝试打开 i_Props.ini 并根据其中的内容做一些魔术。

问题是当 i_build.py 脚本通过根目录中的符号链接启动时,i_build.py 脚本将在根目录中查找其他文件(而不是存储 i_build.py 的 /scripts 目录)。

i_build.py 文件的 props 文件位置为:

PROP_FILE = "i_Props.ini"

并尝试打开它,然后失败。出于明显的原因,我不想硬编码路径。

在主文件中添加的快速测试os.getcwd()证实了我的怀疑,即它认为 CWD 是根目录,并且检查__file__表明它是符号链接(“build_i”)。

我可以做些什么来让 python 使用符号的目的地,比如__file__名称和 CWD?

4

2 回答 2

20

您可以使用__file__,但您必须采取一些预防措施才能获得真正的路径:

import os
base_dir = os.path.dirname(os.path.realpath(__file__))

然后加载相对于 base_dir 的其他文件/资源​​:

some_subdir = 'my_subdir'
some_file = 'my.ini'

ini_path = os.path.join(base_dir, some_subdir, some_file)
于 2013-11-05T22:45:34.593 回答
2

脑海中浮现出几种可能性:

  1. 在根目录中有一个 shell 文件,它通过显式路径调用你的 python 脚本。
  2. 将它所在的目录添加到您的路径中。
  3. 专门将目录添加到 sys.path
于 2013-10-28T19:23:49.500 回答